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
想象一下,您想要在一个 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