2017-08-11 21 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