比较file1和file2,但只显示不在file2中的新行

时间:2014-05-27 14:44:01

标签: bash awk sed grep diff

我目前正在努力比较两个文件的任务。两个文件都具有差异和新行的值。例如:

文件1:

Germany=Munich
Swiss=Bern
Austria=Wien
Italy=Rom

file2的:

Germany=Berlin
Swiss=Bern
Italy=Rom

我的行动结果如下:

OUTPUTFILE:

Austria=Wien

如何才能获得仅存在于file2中的输出文件的行?我对线条的差异不感兴趣。只是一条缺失的完整线。

我已经尝试过diff和sdiff,但没有达到预期的效果。

感谢

3 个答案:

答案 0 :(得分:4)

这应该有效:

awk -F= 'NR==FNR{a[$1]=$0;next}!($1 in a)' file2 file1
Austria=Wien

我们首先阅读了在国家/地区编入索引的整个文件2。我们检查文件1中是否有国家/地区并打印出来。这不会给出file2中但不在file1中的行的结果,但也可以调整以提供给你的结果。我不确定这是否是你的要求。如果是,请更新您的问题,以反映您的所有用例,以获得更完整的答案。

答案 1 :(得分:1)

如果您不关心订购,可以对文件进行排序,然后使用join

sort file1 > file1.srt
sort file2 > file2.srt
join -t'=' -v1 file1.srt file2.srt

join的标志指定使用等号作为字段分隔符,包括来自file1.srt的不可用行,同时抑制来自file1.srt的可配对行。

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 's#([^=]*=).*#/^\1/d#' file2 | sed -f - file1

使用file2作为sed脚本的基础,并针对file1运行此sed脚本