Bash-是否可以在一行的一列中使用-uniq?

teu*_*ara 5 sorting bash uniq

    1.gui  Qxx  16
    2.gu   Qxy  23
    3.guT  QWS  18
    4.gui  Qxr  21
Run Code Online (Sandbox Code Playgroud)

我想根据第3列中的值对文件进行排序,所以我使用:

sort -rnk3 myfile

2.gu   Qxy  23
4.gui  Qxr  21
3.guT  QWS  18
1.gui  Qxx  16
Run Code Online (Sandbox Code Playgroud)

现在我必须输出:(以3.gui开头的行是因为4.gui的行有更大的值)

2.gu   Qxy  23
4.gui  Qxr  21
1.guT  QWS  18
Run Code Online (Sandbox Code Playgroud)

我不能使用,-head因为我有数百万行,我不在哪里切,我无法想办法使用,-uniq因为它对待一条线作为整体,因为我不能告诉-uniq看第一列,它算一条线它是唯一的输出它 - 这是正常的 - .我知道-uniq可以忽略许多字符但是从示例中可以看出第一列可能有各种字符数.

请指教..

Gur*_*uru 8

试试这个:

sort -rnk3 myfile | awk -F"[. ]" '!a[$2]++'
Run Code Online (Sandbox Code Playgroud)

awk根据第二列删除重复项.这实际上是一个着名的awk语法来删除重复.维护一个数组,保持第二个字段的记录.每次打印记录之前,都会在数组中检查第二个字段.如果不存在,则打印,否则将其丢弃,因为它是重复的.这是使用++实现的.第一次,当遇到记录时,此++将自其修复后的计数保持为0.随后出现的事件会增加被否定的价值变成虚假的价值.