Bash- 是否可以只对一行的一列使用 -uniq


    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做

相关内容

  • 没有找到相关文章

最新更新