我想在file2.txt上的同一行以任意顺序从file1.txt中搜索 aaa 和 bbb 以及 ccc
FILE1.TXT
aaa bbb ccc
ddd fff ggg
hhh ddd jjj
jjj ccc
FILE2.TXT
aaa bbb ccc ddd fff ggg --> output whole line since it matches with aaa bbb ccc of file1.txt
aaa ddd jjj hhh --> no output since it does not match with any search pattern in file1.txt
ccc ddd fff ggg jjj --> output whole line since it matches with jjj ccc of file1.txt
这是我到目前为止所写的剧本。但不输出任何东西
gawk 'NR==FNR{a[$1,$2,2$3]++;next} ($0 in a)' file1.txt file2.txt
答案 0 :(得分:1)
要求救援!这是基于示例,但与您的描述不符。
$ awk 'NR==FNR{a[$0];next}
{for(i in a) {
m=1; n=split(i,b," "); {
for(j=1;j<=n;j++)
if($0!~b[j]) m=0
}
}
} m{print}' f1 f2
将导致
aaa bbb ccc ddd fff ggg --> output whole line since it matches with aaa bbb ccc of file1.txt
ccc ddd fff ggg jjj --> output whole line since it matches with jjj ccc of file1.txt
请注意,未在示例中实现线对线匹配。
答案 1 :(得分:0)
这应该有效:
paste file1.txt file2.txt | awk -F '\t' '$1~/aaa|bbb|ccc/{ print $2}'
但正如我在评论中提到的那样,在file1.txt的第4行有一个匹配但在file2.txt中没有第4行,因此它不会打印任何内容。
使用a作为分隔符粘贴合并两个文件。然后使用作为分隔符将paste的输出提供给awk,其中$1
是file1的行,$2
是file2的行。