从linux中的另一个文件中删除包含多个字符串模式的文本文件中的行
目标是基于file1中的前3列值删除file2中的重复行 尝试使用此帖子中的修改后的解决方案(使用单字符串模式),但无法使其工作 输入文件1用制表符分隔(5列ABCDE): 输入文件2:从linux中的另一个文件中删除包含多个字符串模式的文本文件中的行,linux,bash,awk,sed,Linux,Bash,Awk,Sed,目标是基于file1中的前3列值删除file2中的重复行 尝试使用此帖子中的修改后的解决方案(使用单字符串模式),但无法使其工作 输入文件1用制表符分隔(5列ABCDE): 输入文件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|c
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
输出:
从文件2中删除任何具有类似*.*.*a*.*.*.*.*.*.
或*.*.*.*aa*.*.*.*.*.*.*.
或*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.
或.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.
或.*.*.*.*
*|*| N.A.|*| bbbb | cccc |*
之所以出现在列表中,是因为文件1中的最后一行“bbbbbb cccc ddd xxyz”
第一个元素为空(制表符分开)
文件2中的任何字段都可以为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
不捕获带有N.A.的图案,但也不想删除带有N.A.的所有行。$cat tst.awk
$ cat tst.awk
BEGIN { FS = "[\t|]" }
NR==FNR {
for (i=1; i<=3; i++) {
if ($i == "") {
$i = "N.A."
}
}
a[$1 OFS $2 OFS $3]
next
}
!(($3 OFS $5 OFS $6) in a)
$ awk -f tst.awk file1 file2
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
开始{FS=“[\t|]”
NR==FNR{
对于(i=1;i@td17:修改后的解决方案是什么样子的?请显示相关代码并说明确切的问题或错误。仅提供说明是不够的。另请参阅。如果实际输入/输出文件的数据行之间没有空行,请回答您的问题,以便您提供的示例与实际数据的格式相匹配。@EdMorton blank lines只是为了让输入/输出看起来更干净,尽管这很有意义。如果有人想去看,可以参考另一个问题作为背景信息,但请确保你当前的问题是独立的。我不知道你想做什么,但也许其他人会更幸运。
awk 'FNR==NR{a[$1 FS $2 FS $3];next} !(($3 OFS $5 OFS $6) in a)' file1 FS="|" files
$ cat tst.awk
BEGIN { FS = "[\t|]" }
NR==FNR {
for (i=1; i<=3; i++) {
if ($i == "") {
$i = "N.A."
}
}
a[$1 OFS $2 OFS $3]
next
}
!(($3 OFS $5 OFS $6) in a)
$ awk -f tst.awk file1 file2
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