Bash输出具有最高值的行

时间:2012-11-27 09:36:39

标签: linux bash sorting uniq

我的问题非常像this one,但有一点不同;我希望输出在第3个选项卡上得分最高的行。我的数据如下:

1.gui  Qxx  16
2.gui  Qxy  23
3.guT  QWS  11

我希望得到这个:

1.gui  Qxy  23
3.guT  QWS  11

我用过:

cat file.f | uniq | cut -d" " -f3 | sort | uniq -d >>out.f

但没有得到我想要的东西!?

3 个答案:

答案 0 :(得分:5)

使用sort

$ sort -rk3 file             # Sort on column 3, display all results

2.gui  Qxy  23
1.gui  Qxx  16
3.guT  QWS  11

$ sort -rk3 file | head -2   # Sort on column 3, filter number of results

2.gui  Qxy  23
1.gui  Qxx  16

$ sort -rk3 file | uniq      # Sort on column 3, on display unique results 

2.gui  Qxy  23
1.gui  Qxx  16
3.guT  QWS  11

-r反向排序,最高位。

-k3排在第3列。


如果您只想显示第3列大于某个值(即15)的行,请使用awk尝试:

awk '$3>15' file | sort -rk3  # Display line where column 3 > 15 and sort

2.gui  Qxy  23
1.gui  Qxx  16

答案 1 :(得分:3)

对于具有相同问题的未来用户:

不要忘记将-n开关引入-sort命令,或者从9999开始订购您的值,然后是999等。所以使用

sort -rnk3 file

如果您只想获得一个具有最高值的行(删除重复项),请使用:

sort -rnk3 file | awk '!x[$2]++'

如果你有一个通常的分隔符,你可以告诉-awk注意:

sort -rnk3 file | awk -F"[. ]" '!x[$2]++'

答案 2 :(得分:0)

这必须为那些重复名称的行提供最高值,并保留那些没有重复名称的行。

sort -rk3 file | awk '!seen[$1]++' > file_filtered.txt