1.gui Qxx 16
2.gu Qxy 23
3.guT QWS 18
4.gui Qxr 21
我想根据第 3 列中的值对文件进行排序,所以我使用:
sort -rnk3 myfile
2.gu Qxy 23
4.gui Qxr 21
3.guT QWS 18
1.gui Qxx 16
现在我必须输出为:(以 3.gui 开头的行已出局,因为带有 4.gui 的行具有更大的值)
2.gu Qxy 23
4.gui Qxr 21
1.guT QWS 18
我不能使用 -head
,因为我有数百万行并且我不知道在哪里剪切,我找不到使用-uniq
的方法,因为它将一行视为一整行,并且由于我无法告诉-uniq
查看第一列,它计算一行具有唯一性它输出它 - 这是正常的 - 。 我知道-uniq
可以忽略许多字符,但作为你从示例中可以看到第一列可能具有各种字符数。.
请指教..
试试这个:
sort -rnk3 myfile | awk -F"[. ]" '!a[$2]++'
awk 根据第二列删除重复项。 这实际上是一种著名的 awk 语法,用于删除重复项。维护一个数组,其中维护第二个字段的记录。每次打印记录之前,都会检查数组中的第二个字段。如果不存在,则打印它,否则由于它是重复的,因此将其丢弃。这是使用 ++ 实现的。第一次,当遇到记录时,此 ++ 将自其后修复以来将计数保持为 0。SU随之而来的发生将增加值,当否定时变为假值。
你来了:
sort -rnk3 file | awk -F'[. ]' '{ if (a[$2]++ == 0) print }'
2.gu Qxy 23
4.gui Qxr 21
1.guT QWS 18
这将使用awk
来检查第二个字段中的重复值,其中字段分隔符是空格或句点。因此,它将第二个字段视为:
$ awk -F'[. ]' '{ print $2 }' file
gu
gui
guT
gui
在awk
变量$0
表示整行,$1
表示第一个字段,依此类推。
awk -F'[. ]' '{ if (a[$2]++ == 0) print }'
-F
选项允许您指定字段分隔符,在本例中为空格或句点。
所以我通过所有强大而惊人的谷歌找到了这个——我的小脚本建立在@sudo_O的答案之上,因为它向你显示所有找到的重复行......,而不是一个没有重复的文件。
我在第三列(端口)中找到所有重复的文本都在一个名为 master 的文件中.txt
awk '{if (a[$3]++> 0) print}' master.txt |读取站点线程端口时做 格雷普$port大师.txt做