2016-10-01 37 views
2

我有兩個文件獲取值中不存在的另一個文件

FILE1.TXT:

docker/registry:2.4.2 
docker/rethinkdb:latest 
docker/swarm:1.0.0 

FILE2.TXT:

docker/registry:2.4.1 
docker/rethinkdb:1.0.0 
docker/swarm:1.0.0 

輸出應該是:

docker/registry:2.4.2 
docker/rethinkdb:latest 

換句話說,e File1中不存在的File1中的非常行應該是輸出的一部分。

我已經嘗試做以下,但它不工作。

diff File1.txt File2.txt 
+0

您應該過濾掉所有不以「 - 」開頭的行。輸入'grep'^ \ - ''來獲取所有需要的行,並且前面加上一個減號。然後,我認爲你可以使用'sed'/^- //''來刪除那個開始行。 (這是直到我找到一個更好的sed模式) –

回答

1

使用awk,你可以這樣做:

awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1 
1

隨着comm

comm -23 <(sort File1.txt) <(sort File2.txt) 
2

你可以只使用grep它:

$ grep -v -f file2.txt file1.txt 
docker/registry:2.4.2 
docker/rethinkdb:latest 

如果有很多的fil中的行es我可能會使用@ user000001解決方案。

+1

另請注意,您可能想使用'-F'來避免將'file2.txt'中的每一行視爲正則表達式。 – andlrc

相關問題