find两个文本文件每行一个项目之间的区别

我有两个文件:

文件1

dsf sdfsd dsfsdf 

文件2

 ljljlj lkklk dsf sdfsd dsfsdf 

我想显示文件2中的内容,但不是文件1中的内容,所以文件3应该看起来像

 ljljlj lkklk 

你可以试试

 grep -f file1 file2 

要么

 grep -v -F -x -f file1 file2 
 grep -Fxvf file1 file2 

标志是什么意思:

 -F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. -x, --line-regexp Select only those matches that exactly match the whole line. -v, --invert-match Invert the sense of matching, to select non-matching lines. -f FILE, --file=FILE Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. 

您可以使用comm命令来比较两个sorting文件

 comm -13 <(sort file1) <(sort file2) 

我成功地使用了

 diff "${file1}" "${file2}" | grep "<" | sed 's/^<//g' > "${diff_file}" 

将差异输出到文件。

如果你期待他们按照一定的顺序,你可以使用diff

diff file1 file2 | grep ">"

 join -v 2 <(sort file1) <(sort file2) 

一个卢卡的答案尝试了一个小小的变化,它为我工作。

 diff file1 file2 | grep ">" | sed 's/^> //g' > diff_file 

请注意,在sed中search的模式是一个空格。

文件1 
 M1
 M2
 M3

文件2 
 M2
 M4
 M5

 > awk'NR == FNR {file1 [$ 0] ++; 下一个}!(file1中的$ 0)'file1 file2
 M4
 M5

 > awk'NR == FNR {file1 [$ 0] ++; 下一个}(file1中的$ 0)'file1 file2
 M2

 >什么是awk命令来获得“m1和m3”? 如在file1中,而不是在file2中? 
 M1
 M3

如果你想使用循环你可以尝试这样:(diff和cmp更有效率。)

 while read line do flag = 0 while read line2 do if ( "$line" = "$line2" ) then flag = 1 fi done < file1 if ( flag -eq 0 ) then echo $line > file3 fi done < file2 

注:该程序只是提供一个基本的见解,如果你不想使用系统调用,如差异通信可以做什么..

一个awk答案:

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

使用GNU sed

 sed 's#[^^]#[&]#g;s#\^#\\^#g;s#^#/^#;s#$#$/d#' file1 | sed -f- file2 

怎么运行的:

第一个sed产生这样的输出:

 /^[d][s][f]$/d /^[s][d][f][s][d]$/d /^[d][s][f][s][d][f]$/d 

然后它被第二个sed用作sed脚本。