2015-09-15 63 views
1

我有一個文件值的列表:刪除一個文件從另一個文件匹配的模式,價值觀

item2 
item3 
item4 

,我想從另一個文件中刪除整條生產線時行看起來是這樣的:

item1|XXXX|ABCD 
item2|XXXX|ABCD 
item3|XXXX|ABCD 
item4|XXXX|ABCD 
item5|XXXX|ABCD 

讓我留下了:

item1|XXXX|ABCD 
item5|XXXX|ABCD 

是否有bash序列做到這一點?

回答

2

grep -vf可以做的工作:

grep -vFf file1 file2 
item1|XXXX|ABCD 
item5|XXXX|ABCD 
2

如果你的獨特標誌是|XXXX|ABCD|字符串,你可以grep出來:

$ grep -vF '|XXXX|ABCD|' input > output 

它的安全使用選項-F(固定字符串)因爲你的模式危險地接近於包含正則表達式元字符(即在你的情況下:| —它在默認grep中不活動正則表達式的語法,但當你使用簡單模式時,你不會擔心這一點)。

如果你的獨特模式是行的其餘部分,可以使用整個文件與grep-f選項模式列表:

$ grep -vFf item_list <input> output 
2

awk來救援!

$ awk -F"|" 'NR==FNR{a[$1];next} !($1 in a)' remove items 
item1|XXXX|ABCD 
item5|XXXX|ABCD 

應除去項目列表中的文件「刪除」,並在文件中的數據「項」

相關問題