【问题标题】:Identifying the difference in Two files in unix识别unix中两个文件的区别
【发布时间】:2019-02-01 11:13:51
【问题描述】:

我有 2 个文件 rec1.txt 和 rec2.txt。

[gpadmin@subh ~]$cat ret1.txt
emcas_fin_bi=324
emcas_fin_drr=3294
emcas_fin_exp=887
emcas_fin_optics=0
emcas_gbo_gs=3077

[gpadmin@subh ~]$ cat ret2.txt
emcas_fin_bi=333
emcas_fin_drr=5528
emcas_fin_exp=1134
emcas_fin_optics=0
emcas_fin_revpro=0
emcas_gbo_gs=3897

我提供比较为:-

[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

【问题讨论】:

  • 你想要的输出和你得到的除了顺序是一样的,顺序对你很重要吗????请考虑添加完整的预期输出
  • 是的@Inder,因为我的输出是错误的,所以在第二列 emcas_gbo_gs 与第一列匹配,但它显示为新条目并与其他 emcas 匹配......这是错误的。跨度>
  • 所以你只想要两个文件中的唯一值??基于'='之前的唯一值???
  • 好的...我将尝试以另一种方式解决此问题...您可以通过用第一个文件减去第二个文件来帮助我找到第三个文件中两个文件的差异。但是第二个文件中的任何新条目也应该在最终(第三个)文件中捕获。
  • 您真的需要像diff 那样将输出格式化成列吗?

标签: bash unix awk scripting text-processing


【解决方案1】:

awk 来救援!

$ 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

【讨论】:

  • 你发布了我见过的最可怕的 awk 之一:P
  • 把感叹号!换成管道和空格| ,老眼睛已经看不清楚了……
  • @Inder,每个单独的语句都应该易于理解。将它们放在一起可能需要一些经验,但不需要分析。
  • @karakfa,运行 awk 后缺少 emcas_fin_optics=0。为什么?即使我用更多条目运行这个 awk,我也无法获得所有输出。很少有人失踪。
  • 因为在两个文件中都是一样的所以没有区别。
【解决方案2】:

diff 工具比较 而不是 (key)words。甚至--minimal 选项也没有产生您想要的结果(至少在我的机器上)。

我看到了两种解决方案:

  • 始终在文件末尾添加新关键字。
  • 将值更改与添加(或删除)关键字分开。

【讨论】:

  • 好的...我将尝试以另一种方式解决此问题...您可以通过用第一个文件减去第二个文件来帮助我找到第三个文件中两个文件的差异。但是第二个文件中的任何新条目也应该在最终(第三个)文件中捕获。
猜你喜欢
  • 2010-09-06
  • 2012-02-29
  • 2023-01-23
  • 2017-04-05
  • 2018-03-19
  • 1970-01-01
  • 2012-12-05
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多