2017-08-11 54 views
0

我有兩個文件,我想通過比較兩個文件來獲得新行,我知道可以使用'diff newfile oldfile'來獲取新行,但輸出將包括「 <「和我不想要的差異信息。linux shell diff兩個文件獲取新行

例如,現在我有一個的oldfile:

a 
b 
c 

和newfile中

a 
b 
c 
d 
e 
f 

的 '差異newfile中的oldfile' 的結果將是

4,6d3 
< d 
< e 
< f 

但結果我想要的是

d 
e 
f 

那麼我怎麼能得到這個輸出?我搜索了很多差異選項,但沒有任何想法

在此先感謝您。

+1

的可能的複製(https://stackoverflow.com/問題/ 18204904 /快速查找線路不在另一個文件中) –

+0

另請參閱[BashFAQ/036](http://mywiki.wooledge.org/BashFAQ/036):「我如何獲得所有行:兩個文件中的所有行(設置交集)或僅兩個文件中的一個(設置減法)。」 –

+0

你可以通過「native」diff – RomanPerekhrest

回答

2

this question類似,您可以使用comm來達到此目的。

comm -13 file1 file2 

只打印不中file1存在的file2線。

+0

獲得所需的結果,這解決了我的問題。 –

+0

@SakuraKyouko請記住'comm'需要對輸入文件進行排序。 –

0

你也可以用awk:

$ awk 'NR==FNR{a[$0];next} ($0 in a==0)' oldfile newfile 
d 
e 
f 

grep如果文件沒有那麼大(介意部分匹配):

$ grep -v -f oldfile newfile 
d 
e 
f 

join(inputfiles需要訂購):

$ join -v 2 oldfile newfile 
d 
e 
f 
1

原生DIFF溶液:

diff --changed-group-format='%<' --unchanged-group-format='' new.txt old.txt 

輸出:[?發現在一個文件中沒有的另一行的快速方式]

d 
e 
f