【发布时间】:2019-11-21 12:27:42
【问题描述】:
目标是根据 file1 中的前 3 列值删除 file2 中的重复行。
尝试使用此帖子中的修改解决方案(使用单字符串模式)但无法使其工作..
remove all lines in a file containing a string from another file
输入文件 1 是制表符分隔的(5 列 ABCDE):
A B C D E
a b c d x
aa bb cc dd xy
aaa bbb ccc ddd xyz
bbbb cccc dddd xxyz
输入文件2:
123|234|aa|ur29842|b|c|234|567
123|234|a|ur29|b|c|234|567
123|234|aa|ur290792|bb|cc|234|567
123|234|aa|ur2909842|bb|ccc|234|567
123|234|aaa|ur29042842|bb|cc|234|567
123|234|aaa|ur2922|bbb|ccc|234|567
123|234|N.A.|ur2922|bbbb|cccc|234|567
123|234|N.A.|ur2922|bbb|cccc|234|567
输出:
从 file2 中删除任何具有 *|*|a|*|b|c|*|* 或 *|*|aa|*|bb|cc|*|* 或 *|*|aaa|*|bbb|ccc|*|* 或 *|*|N.A.|*|bbbb|cccc|*|* 等模式的行
*|*|N.A.|*|bbbb|cccc|*|* 在列表中的原因是因为 file1 中的最后一行 " bbbb cccc dddd xxyz" 第一个元素为空(制表符分隔)
file2 中的任何字段都可以是 N.A..
123|234|aa|ur29842|b|c|234|567
123|234|aa|ur2909842|bb|ccc|234|567
123|234|aaa|ur29042842|bb|cc|234|567
123|234|N.A.|ur2922|bbb|cccc|234|567
awk 'FNR==NR{a[$1 FS $2 FS $3];next} !(($3 OFS $5 OFS $6) in a)' file1 FS="|" files
不捕获带有 N.A. 的模式,但也不想删除带有 N.A. 的所有行。
【问题讨论】:
-
@td17:您修改后的解决方案看起来如何?
-
请显示相关代码并说明确切的问题或错误。仅有描述是不够的。另见How to create a Minimal, Complete, and Verifiable example。
-
如果您的真实输入/输出文件的数据行之间没有空行,那么 edit 您的问题,因此您提供的样本与您的真实数据的格式相匹配。
-
@EdMorton 空行只是为了让输入/输出看起来更干净,尽管这很好。
-
如果有人想查看另一个问题以获取背景信息,但请确保您当前的问题独立存在,这很好。我不知道你想做什么,但也许其他人会有更多的运气。