如何比较两个文件并打印不匹配的记录

如何比较两个文件并打印不匹配的记录

如果文件 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

相关内容