如果在其中一列中发现出现,则从两列文件中删除行
Delete lines from a two-column file if occurence is found in one of the columns
假设我有一个包含以下内容的两列文件:
1 4
1 11
4 5
5 11
如果在下一行中找到数字(来自第一列或第二列),我想删除所有行,无论它是在第一列还是第二列。
所以我应该得到这样的结果:
1 4
5 11
- 初始文件中的第二行,即 (1 11) 被删除,因为
“1”已经在第一行。
- 第三行 (4 5) 被删除,因为 '4' 已经在第一行
行。
- 但是第四行(5 11)没有删除,因为第三行(4
5) 刚刚被删除了。
我已经尝试过使用 awk 或 sort 但未能获得预期的结果。
有什么办法吗?
提前致谢。
以下 awk
可能会对您有所帮助。
awk '{for(i=1;i<=NF;i++){if($i in a){next};a[$i]}} 1' Input_file
这可能对你有用 (GNU sed):
sed -r ':a;N;/^(\S+) (\S+)\n((|) \S+)|(\S+ (|))$/s/\n.*//;ta;P;D' file
将下一行追加到当前行。如果附加行具有当前行的任一值,则将其删除并附加下一行。否则,打印然后删除当前行并重复。
假设我有一个包含以下内容的两列文件:
1 4
1 11
4 5
5 11
如果在下一行中找到数字(来自第一列或第二列),我想删除所有行,无论它是在第一列还是第二列。
所以我应该得到这样的结果:
1 4
5 11
- 初始文件中的第二行,即 (1 11) 被删除,因为 “1”已经在第一行。
- 第三行 (4 5) 被删除,因为 '4' 已经在第一行 行。
- 但是第四行(5 11)没有删除,因为第三行(4 5) 刚刚被删除了。
我已经尝试过使用 awk 或 sort 但未能获得预期的结果。 有什么办法吗?
提前致谢。
以下 awk
可能会对您有所帮助。
awk '{for(i=1;i<=NF;i++){if($i in a){next};a[$i]}} 1' Input_file
这可能对你有用 (GNU sed):
sed -r ':a;N;/^(\S+) (\S+)\n((|) \S+)|(\S+ (|))$/s/\n.*//;ta;P;D' file
将下一行追加到当前行。如果附加行具有当前行的任一值,则将其删除并附加下一行。否则,打印然后删除当前行并重复。