想象一下,您希望在表的给定字段中保留具有最高值的记录,只需在另一个字段定义的类别内进行比较(并忽略其他字段的内容)。
所以,给定输入nye.txt:
X A 10.00
X A 1.50
X B 0.01
X B 4.00
Y C 1.00
Y C 2.43
你期望这个输出:
X A 10.00
Y C 2.43
这是之前相关主题的一个结果:awk: keep records with the highest value, comparing those that share other fields
我已经有了一个解决方案(见下文),但欢迎提出建议!
答案 0 :(得分:4)
使用 awk :
这样的话awk '$3>=a[$1]{a[$1]=$3; b[$1]=$0} END{for(i in a)print b[i]}' File
对于每个1st column value
(X,Y等..),如果3rd column value
大于或等于先前存储的大值(即a[$i]
;最初它将是0
默认情况下为{1}},使用此3rd column value
更新[$ i]。同时将整行保存在数组b中。在END
块内,打印结果。
<强>输出:强>
AMD$ awk '$3>a[$1]{a[$1]=$3; b[$1]=$0} END{for(i in a)print b[i]}' File
X A 10.00
Y C 2.43
答案 1 :(得分:0)
我的解决方案是:
awk '{ k=$1 } { split(a[k],b," ") } $3>b[2] { a[k]=$2" "$3 } END { for (i in a) print i,a[i] }' nye.txt
第一个括号区块指示哪个字段定义了您要在其中比较另一个字段的类别(在本例中为第1个和第3个字段)。
(基于https://stackoverflow.com/a/29239235/3298298)
欢迎提示!