如果在其中一列中发现了出现,则从两列文件中删除行

时间:2018-05-07 08:32:18

标签: sorting awk sed text-processing

假设我有一个包含此内容的双列文件:

1 4
1 11
4 5
5 11

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

所以我应该有这样的结果:

1 4
5 11
  • 删除初始文件中的第二行,即(111),因为 '1'已经在第一行了。
  • 第三行(4 5)被删除,因为'4'已经在第一行 线。
  • 但第四行(5 11)未被删除,因为第三行(4 5)之前已被删除。

我已经尝试过使用awk或sort但是没有设法获得预期的结果。 有什么可以做的吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

关注awk可能对您有帮助。

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

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

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