[英]How to pick top line of each group of related lines with awk after Unix sort
我有以下数据(实际上有~100行)
foo qux 0 x,y
bar twe 1 a,b,c
foo qux 2 x,y,z
我想要做的是按第一个字段排序,当有一个领带选择第三个字段的最高值。 产量:
bar twe 1 a,b,c
foo qux 2 x,y,z
但为什么这段代码不起作用?
sort -k1,1 -k2,2 -k3,3nr datafile.txt |
awk '$3 != x {print} {x = $3}'
# The last awk line attempts to pick top from tie
什么是正确的方法呢?
你的命令接近正确,但你需要打破$1
,而不是$3
。 此外,您的声明是您需要对第一个字段和第三个字段进行排序,但代码依次排序,然后是第二个字段,然后是第三个字段。
那么,名义上,你需要:
sort -k1,1 -k3,3nr datafile.txt | awk '$1 != x { print } { x = $1 }'
如果你需要打破第一个和第二个字段(并对它们进行排序),那么:
sort -k1,1 -k2,2 -k3,3nr datafile.txt |
awk '$1 != x || $2 != y { print } { x = $1; y = $2; }'
sort -k1,1rn <your_file>|awk '{a[$1]=$0;}END{for(i in a)print a[i]}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.