Bash 识别unix中两个文件的差异
我有两个文件rec1.txt和rec2.txt 及 我提供的比较如下:-Bash 识别unix中两个文件的差异,bash,unix,awk,scripting,text-processing,Bash,Unix,Awk,Scripting,Text Processing,我有两个文件rec1.txt和rec2.txt 及 我提供的比较如下:- [gpadmin@subh ~]$ diff -y ret1.txt ret2.txt emcas_fin_bi=324 | emcas_fin_bi=333 emcas_fin_drr=3294 | emcas_fin_drr=5528 emcas_fin_exp=887
[gpadmin@subh ~]$ diff -y ret1.txt ret2.txt
emcas_fin_bi=324 | emcas_fin_bi=333
emcas_fin_drr=3294 | emcas_fin_drr=5528
emcas_fin_exp=887 | emcas_fin_exp=1134
emcas_fin_optics=0 emcas_fin_optics=0
emcas_gbo_gs=3077 | emcas_fin_revpro=0
> emcas_gbo_gs=3897
我认为这是上述输出的错误输出,因为emcas_gbo_gs很常见,但显示为新词:-
emcas_gbo_gs=3077 | emcas_fin_revpro=0
> emcas_gbo_gs=3897
期望输出:-
emcas_gbo_gs=3077 | emcas_gbo_gs=3897
> emcas_fin_revpro=0
diff工具比较行而不是关键字。即使是最小的选项也不能产生你想要的结果,至少在我的机器上是这样
我看到两种解决办法:
始终在文件末尾添加新关键字。
将对值的更改与添加或删除关键字分开。
救命啊
$ awk -F= 'NR==FNR {a[$1]=$2; next}
$1 in a {if(a[$1]!=$2) print $1 FS a[$1] "\t!" $0;
delete a[$1]; next}
{print " \t>" $0}
END {for(k in a) print ">" k"="a[k]}' f1 f2 | column -ts$'\t'
emcas_fin_bi=324 !emcas_fin_bi=333
emcas_fin_drr=3294 !emcas_fin_drr=5528
emcas_fin_exp=887 !emcas_fin_exp=1134
>emcas_fin_revpro=0
emcas_gbo_gs=3077 !emcas_gbo_gs=3897
你想要的输出和你得到的是相同的,除了订单,你的订单重要吗????,请考虑添加完整的预期OutPosie@ Enter,因为我的输出是错误的,在第二列EcCasgGBOIGS匹配的第一列,但它作为一个新的条目显示,并与其他EMCAS匹配…这是错误的。所以您只需要两个文件中的唯一值??基于“=”之前的值的唯一值??好的。。。我会尝试用另一种方式来处理这个问题。。。你可以用第一个文件减去第二个文件,帮我找出第三个文件中两个文件的差异。但是第二个文件中的任何新条目也应该在最后一个文件中捕获。您真的需要将输出格式设置为与diff完全相同的列吗?好的。。。我会尝试用另一种方式来处理这个问题。。。你可以用第一个文件减去第二个文件,帮我找出第三个文件中两个文件的差异。但是第二个文件中的任何新条目也应该在最后一个文件中被捕获。你发布了我见过的最恐怖的awk之一:前置感叹号!有了管道和空间|,老眼睛再也看不清楚了……@Inder,每个单独的陈述都应该很容易理解。将它们放在一起可能需要一些经验,但不需要分析。@karakfa,emcas_fin_optics=0在运行awk后丢失。为什么?即使在我运行这个awk时没有更多的条目,我也无法获得所有的输出。缺少的很少,因为两个文件中的内容相同,所以没有区别。
emcas_gbo_gs=3077 | emcas_gbo_gs=3897
> emcas_fin_revpro=0
$ awk -F= 'NR==FNR {a[$1]=$2; next}
$1 in a {if(a[$1]!=$2) print $1 FS a[$1] "\t!" $0;
delete a[$1]; next}
{print " \t>" $0}
END {for(k in a) print ">" k"="a[k]}' f1 f2 | column -ts$'\t'
emcas_fin_bi=324 !emcas_fin_bi=333
emcas_fin_drr=3294 !emcas_fin_drr=5528
emcas_fin_exp=887 !emcas_fin_exp=1134
>emcas_fin_revpro=0
emcas_gbo_gs=3077 !emcas_gbo_gs=3897