1
jswh 2018-06-25 14:22:51 +08:00
excel
|
3
SaulLawliet 2018-06-25 14:30:22 +08:00 2
大概这样吧
awk -F'|' '{if(a[$2] < $3) {a[$2] = $3; b[$2] = $0}} END{for(i in b) print b[i]}' |
4
CEBBCAT 2018-06-25 14:32:53 +08:00 via Android
最终仅输出一行的意思?
|
5
iwaifor OP @SaulLawliet 可用,很神奇,麻烦问问,这个具体是 awk 的什么用法
|
6
imn1 2018-06-25 15:08:31 +08:00
「第二」是至下标 2 吧?否则按语文理解你这去重只剩下一行啊
|
7
lululau 2018-06-25 15:11:41 +08:00
来个 Perl 版本的:
perl -F'\|' -ane '{$h{$F[1]}=$_ and $c{$F[1]}=$F[2] if $c{$F[1]} < $F[2]}END{print for values %h}' |
8
lululau 2018-06-25 15:20:27 +08:00 1
再来个 Ruby 版的:
ruby -F'\|' -ane 'x||=[]; x<<$F;END{x.group_by{|e|e[1]}.map{|_,y|y.max_by{|l|l[2].to_i}*"|"}.each{|l|puts l}}' |
9
tamlok 2018-06-25 15:31:42 +08:00 via Android
楼下再补充个 C 版本:
|
10
SaulLawliet 2018-06-25 16:01:15 +08:00
|
11
ant2017 2018-06-25 16:40:47 +08:00
awk 'BEGIN{FS=OFS="|";} {if($2 in a){if($3>a[$2]){a[$2]=$3;b[$2]=$0;}}else{a[$2]=$3;b[$2]=$0;}} END{for(i in b){print b[i]}}' aa.unl
|