awk:保留具有共享字段的最高值的记录,同时忽略其他字段

awk: keep records with the highest value that share a field, while ignoring other fields

想象一下,您想要在一个 table 的给定字段中保留具有最高值的记录,只需在另一个字段定义的类别内进行比较(并忽略其他字段的内容)。

因此,给定输入 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 '{ k= } { split(a[k],b," ") } >b[2] { a[k]=" " } END { for (i in a) print i,a[i] }' nye.txt

第一个括号块表示哪个字段定义了您要在其中与其他字段(在本例中为第 1 和第 3 字段)进行比较的类别。

(基于

欢迎提出想法!

awk 类似:

awk '>=a[]{a[]=; b[]=[=10=]} END{for(i in a)print b[i]}' File

对于每个1st column value(X,Y等),如果3rd column value大于或等于先前存储的大值(即a[$i];最初它将默认为 0),用 3rd column value 更新 a[$i]。还将整行保存在数组 b 中。在 END 块中,打印结果。

输出:

AMD$ awk '>a[]{a[]=; b[]=[=11=]} END{for(i in a)print b[i]}' File
X A 10.00
Y C 2.43