【问题标题】:I dont want to print repeated lines based on column 6 and 7我不想根据第 6 列和第 7 列打印重复的行
【发布时间】:2019-09-14 10:18:58
【问题描述】:

我不想根据第 6 列和第 7 列打印重复的行。sort -u 似乎没有帮助

cat /tmp/testing :-

-rwxrwxr-x. 1 root root  52662693 Feb 27 13:11 /home/something/bin/proxy_exec
-rwxrwxr-x. 1 root root  27441394 Feb 27 13:12 /home/something/bin/keychain_exec
-rwxrwxr-x. 1 root root  45570820 Feb 27 13:11 /home/something/bin/wallnut_exec
-rwxrwxr-x. 1 root root  10942993 Feb 27 13:12 /home/something/bin/log_exec
-rwxrwxr-x. 1 root root 137922408 Apr 16 03:43 /home/something/bin/android_exec

当我尝试cat /tmp/testing | sort -u -k 6,6 -k 7,7 时,我得到:-

-rwxrwxr-x. 1 root root 137922408 Apr 16 03:43 /home/something/bin/android_exec
-rwxrwxr-x. 1 root root  52662693 Feb 27 13:11 /home/something/bin/proxy_exec

所需的输出如下,因为这是基于月份和日期列与其他文件不同的唯一文件

-rwxrwxr-x. 1 root root 137922408 Apr 16 03:43 /home/something/bin/android_exec

【问题讨论】:

  • uniq -u 有效,但是如何将它与第 6 列和第 7 列一起使用,或者有没有办法使用 awk?
  • 其实想通了。猫/tmp/测试| awk '{打印 $9,$6,$7}' | uniq -u -f 1
  • 欢迎来到 SO。很高兴您找到了解决方案,但您在所需输出中显示的内容与您发现的内容不同?

标签: sorting awk sed


【解决方案1】:

在 gnu sed 上试过

sed -E '/^\s*(\S+\s+){5}Feb\s+27/d' testing

在 gnu awk 上试过

awk 'NR==1{a=$6$7;next} a!=$6$7{print}' testing

【讨论】:

  • 如果输出来自ls -lt,awk 将失败,即。所需的单行首先出现。
【解决方案2】:

[not] 使用 awk 根据第 6 列和第 7 列打印重复的行,您可以:

$ awk '
++seen[$6,$7]==1 {          # count seen instances
    keep[$6,$7]=$0          # keep first seen ones       
}
END {                       # in the end
    for(i in seen)
        if(seen[i]==1)      # the ones seen only once
            print keep[i]   # get printed
}' file                     # from file or pipe your ls to the awk

给定输入的输出:

-rwxrwxr-x. 1 root root 137922408 Apr 16 03:43 /home/something/bin/android_exec

注意:所有针对解析 ls 输出的标准警告仍然适用。

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 2021-08-08
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多