2015-09-25 91 views
0

我需要從文件1中刪除重複值與文件2比較。當我試圖這樣做時,我面臨的問題,因爲文件2(c,g)中的值也在文件1中的[b]下,這些也被刪除。但我的要求是隻刪除[a]下的那些。感謝比較2個文件並刪除重複行只有一次

$ less file 1 
[a] 
c 
g 
d 
[b] 
c 
g 
h 

$ less file 2 
[a] 
c 
g 
d 
+1

和你想要的輸出是...? –

+0

'grep -v -f file2 file1' .....雖然它可能會導致誤報 –

+0

@glennjackman有一個很好的觀點 - 我可以想象你想要輸出什麼變化。另外,雖然 - 可以file2包含多個塊或始終1?如果file2的第一行是'[b]',輸出是什麼? –

回答

3

可以使用此awk命令:

awk '/^\[.*?\]/{s=$0} FNR==NR{seen[s,$0]++; next} !seen[s,$0]' file2 file1 
[b] 
c 
g 
h 

這AWK是使用關聯數組seen用的值內[...]和複合鍵以後的所有記錄即s,$0

通過file2時,它將這些值保存在數組中,並在遍歷file1時將只打印那些在seen中不可用的值,從而避免重複。