繁体   English   中英

如何在Unix排序后用awk选择每组相关行的顶行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM