我有两个文件:
档案1
dsf
sdfsd
dsfsdf
文件2
ljljlj
lkklk
dsf
sdfsd
dsfsdf
我想显示文件2中的内容,但不显示文件1中的内容,因此文件3应该显示为
ljljlj
lkklk
答案 0 :(得分:131)
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.
答案 1 :(得分:46)
你可以尝试
grep -f file1 file2
或
grep -v -F -x -f file1 file2
答案 2 :(得分:38)
您可以使用comm
命令比较两个已排序的文件
comm -13 <(sort file1) <(sort file2)
答案 3 :(得分:12)
我成功使用了
diff "${file1}" "${file2}" | grep "<" | sed 's/^<//g' > "${diff_file}"
将差异输出到文件。
答案 4 :(得分:8)
如果您按照特定顺序预期,可以使用diff
diff file1 file2 | grep ">"
答案 5 :(得分:6)
join -v 2 <(sort file1) <(sort file2)
答案 6 :(得分:3)
答案 7 :(得分:2)
file1 m1 m2 m3 file2 m2 m4 m5 >awk 'NR == FNR {file1[$0]++; next} !($0 in file1)' file1 file2 m4 m5 >awk 'NR == FNR {file1[$0]++; next} ($0 in file1)' file1 file2 m2 > What's awk command to get 'm1 and m3' ?? as in file1 and not in file2? m1 m3
答案 8 :(得分:1)
如果你想使用循环你可以尝试这样:( 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
注意:该程序只是为了提供一个基本的见解,如果你不想使用系统调用,例如diff n comm,可以做些什么。
答案 9 :(得分:1)
awk 'NR == FNR {file1[$0]++; next} !($0 in file1)' file1 file2
答案 10 :(得分:0)
使用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
脚本。