我的问题非常像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
但没有得到我想要的东西!?
答案 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