awk将一个文件与另一个文件进行比较

时间:2015-10-06 19:47:49

标签: file awk compare

我想在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

2 个答案:

答案 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的行。