试想一下,你想保持最高值记录在表中的某一领域,仅仅通过另一个字段定义的类别中进行比较(而忽略其他的内容)。
因此,考虑到输入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
这是此以前,相关话题的offshot: AWK:保持最高值的记录,比较那些共享等领域
我已经有一个解决方案(见下文),但是想法,欢迎!
试想一下,你想保持最高值记录在表中的某一领域,仅仅通过另一个字段定义的类别中进行比较(而忽略其他的内容)。
因此,考虑到输入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
这是此以前,相关话题的offshot: AWK:保持最高值的记录,比较那些共享等领域
我已经有一个解决方案(见下文),但是想法,欢迎!
事情是这样的使用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
默认情况下),更新[ $ I]与此3rd column value
。 还保存在数组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
我的解决办法是:
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
第一托架块指示哪个字段定义在其内要比较的其他字段的类别(第一和第三字段,在这种情况下)。
(基于https://stackoverflow.com/a/29239235/3298298 )
想法表示欢迎!