AWK:保持与共享领域的最高值的记录,而忽略了其他领域(awk: keep records with

2019-10-22 08:46发布

试想一下,你想保持最高值记录在表中的某一领域,仅仅通过另一个字段定义的类别中进行比较(而忽略其他的内容)。

因此,考虑到输入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:保持最高值的记录,比较那些共享等领域

我已经有一个解决方案(见下文),但是想法,欢迎!

Answer 1:

事情是这样的使用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


Answer 2:

我的解决办法是:

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 )

想法表示欢迎!



文章来源: awk: keep records with the highest value that share a field, while ignoring other fields
标签: bash awk gawk