【问题标题】:Delete lines from a two-column file if occurence is found in one of the columns如果在其中一列中发现出现,则从两列文件中删除行
【发布时间】:2018-10-17 00:21:49
【问题描述】:

假设我有一个包含以下内容的两列文件:

1 4
1 11
4 5
5 11

如果数字(从第一列或第二列)在下一行中找到,无论是在第一列还是第二列,我想删除所有行。

所以我应该得到这样的结果:

1 4
5 11
  • 初始文件中的第二行,即 (1 11) 被删除,因为 '1' 已经在第一行了。
  • 第三行 (4 5) 被删除,因为 '4' 已经在第一行了 行。
  • 但是第四行 (5 11) 没有被删除,因为第三行 (4 5) 刚刚被删除。

我已经尝试过使用 awk 或 sort,但没有获得预期的结果。 有什么办法吗?

提前致谢。

【问题讨论】:

    标签: sorting awk sed text-processing


    【解决方案1】:

    关注awk 可能对您有所帮助。

    awk '{for(i=1;i<=NF;i++){if($i in a){next};a[$i]}} 1'   Input_file
    

    【讨论】:

      【解决方案2】:

      这可能对你有用(GNU sed):

      sed -r ':a;N;/^(\S+) (\S+)\n((\1|\2) \S+)|(\S+ (\1|\2))$/s/\n.*//;ta;P;D' file
      

      将下一行添加到当前行。如果附加的行具有当前行的任何一个值,请将其删除并附加下一行。否则,打印然后删除当前行并重复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2019-06-13
        相关资源
        最近更新 更多