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
脚本。