2015-10-06 77 views
1

我希望到grep爲AAABBBCCC從FILE1.TXT在同一線路上的任何順序FILE2.TXTAWK比較一個文件與另一個文件

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

jjj ccc在file1.txt中的第4行,並且file2.txt中沒有line4,所以從技術上講,只有file2.txt的第一行應該在輸出中 –

回答

0

這應該工作:

paste file1.txt file2.txt | awk -F '\t' '$1~/aaa|bbb|ccc/{ print $2}' 

但正如我在我的評論mentionned上有FILE1.TXT 4號線的匹配,但存在不file2的4號線.txt,所以它不會打印任何東西。

使用a作爲分隔符粘貼合併兩個文件。然後它將paste的輸出作爲分隔符輸入到awk中,其中$1是file1的行,而$2是file2的行。

1

awk來拯救!這是基於該示例,但與您的描述不匹配。

$ 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 

注意,線線匹配是不是在你的例子來實現。

+0

它出於某種原因,但它僅輸出一行搜索file1.txt的模式。其餘的匹配行被省略。 – sdf

+0

@sdf,你的數據是通過Windows通過源代碼,編輯器還是ftp(等)傳遞的?如果是這樣,'dos2unix f1 f2 as_many_files_as_you_like'。祝你好運。 – shellter

+0

@karakfa腳本工作,雖然它只返回file1.txt的最後一個條目 – sdf