如果文件 1 中的记录与文件 2 中的记录匹配,则无需将记录输出到文件 3。我有两个文件:
文件1
one
one
two
three
three
four
five
five
five
six
six
文件2
one
three
six
输出文件3应该是
two
four
five
我试过
diff --old-line-format="" --unchanged-line-format="" file1 file2
但它没有返回我需要的内容
谢谢,艾拉
答案1
对于简单的单向差异,您可以使用 grep,例如。
$ grep -vxFf file2 file1
two
four
five
如果您需要双向差异,那么一个不错的选择是comm
- 但是文件必须按词汇顺序排列:
$ comm <(sort file2) <(sort file1)
five
four
one
six
three
two
或者只针对file1
$ comm -13 <(sort file2) <(sort file1)
five
four
two
如果中有重复项file1
并且您希望将它们从输出中排除,那么您可以使用grep
并通过管道传输结果sort -u
,或者使用comm
并将普通排序更改为sort -u
:
grep -vxFf file2 file1 | sort -u
或者
comm -13 <(sort file2) <(sort -u file1)
使用 Awk 的替代方法,删除重复项并保留顺序:
$ awk 'NR==FNR {seen[$0]; next} !($0 in seen){print; seen[$0]}' file2 file1
two
four
five