我目前正在努力比较两个文件的任务。两个文件都具有差异和新行的值。例如:
文件1:
Germany=Munich
Swiss=Bern
Austria=Wien
Italy=Rom
file2的:
Germany=Berlin
Swiss=Bern
Italy=Rom
我的行动结果如下:
OUTPUTFILE:
Austria=Wien
如何才能获得仅存在于file2中的输出文件的行?我对线条的差异不感兴趣。只是一条缺失的完整线。
我已经尝试过diff和sdiff,但没有达到预期的效果。
感谢
答案 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脚本