awk:保留具有最高值的记录,比较那些共享其他字段的记录

时间:2015-03-24 17:24:16

标签: bash awk gawk

我试图编写一个awk脚本,使记录在给定字段中保持最高值,但只比较共享其他两个字段的记录。

我最好给出一个例子 - 这是input.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

我想比较第1和第2个字段(X A,X B或Y C)中共享相同值的所有记录,并选择第3个字段中具有最高数值的记录。

所以,我期待这个输出:

X A 10.00
X B 4.00
Y C 2.43

使用此代码段,我可以在第3个字段中选择具有最大值的记录(但它没有考虑以前的字段,并且它也没有输出它们):

awk 'BEGIN {max = 0} {if ($2>max) max=$2} END {print max}' input.txt

当前(不需要的)输出:

10.00

有什么想法吗?我可以用gawk。

提前多多感谢!

1 个答案:

答案 0 :(得分:4)

你可以使用这个awk:

awk '{k=$1 OFS $2} $3>a[k]{a[k]=$3} END{for (i in a) print i, a[i]}' file
X A 10.00
X B 4.00
Y C 2.43