5

我的问题很像这个问题,但有一个不同;我想要输出在第三个选项卡上得分最高的行。我的数据是这样的:

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

但没有得到我想要的!?

4

3 回答 3

9

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 列大于某个值(即 15)的行,请尝试使用awk

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

2.gui  Qxy  23
1.gui  Qxx  16
于 2012-11-27T09:42:37.583 回答
3

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

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

sort -rnk3 file

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

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

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

sort -rnk3 file | awk -F"[. ]" '!x[$2]++'
于 2012-11-27T17:02:21.983 回答
0

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

sort -rk3 file | awk '!seen[$1]++' > file_filtered.txt
于 2018-03-26T00:00:33.047 回答