【问题标题】:Unix file comparisonUnix文件比较
【发布时间】:2015-10-05 07:33:46
【问题描述】:

我有两个文件,它们的组件名称和版本号用空格分隔:

cat file1
com.acc.invm:FNS_PROD 94.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.9
com.acc.invm:SendEmail 29.6.113
com.acc.invm:SendSms 12.23.65

cat file2 
com.acc.invm:FNS_PROD 94.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.0.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
com.acc.invm:distri_cob 110

需要的输出是:file2 中版本高于 file1 的所有组件。

如果file1中没有的组件,我们必须忽略file2中的组件,以及file1中具有相同版本和更低版本的组件。

在这个例子中,期望的输出是

 com.acc.invm:FNS_APIPlat_BDMap 100.0.10
 com.acc.invm:SendEmail 29.60.113
 com.acc.invm:SendSms 133.28.65

希望我清楚我的要求。

【问题讨论】:

  • 任何帮助将不胜感激

标签: unix awk file-comparison


【解决方案1】:

这是一个“差不多”的简单解决方案:

join -a1 file1 file2 | awk '$2 > $3 {print $1,$2}'

它产生:

com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.9
com.acc.invm:SendEmail 29.6.113
com.acc.invm:SendSms 12.23.65

请注意,生成 BDMap 条目是因为 awk 不知道如何解析您的版本号,因此会以文本方式比较它们。如果您可以使用具有固定位数的版本号(例如 100.000.009),则可以解决此问题,但我想您不想这样做,因此我们需要在上述内容上多做一些工作。

【讨论】:

  • 谢谢约翰,但我的要求是,它也应该取决于版本。文件 1 中版本高于文件 2 的所有组件。 file1 中不在 file2 中的所有组件。 BDMap 不应该在 o/p 中,因为它在 file1 中的版本(100.0.9)相对于 file2 较低。
  • @RakeshSinghTomar:是的,如果您阅读了我写的内容,您可以看到我对这些问题的完整讨论。您应该将您已经拥有的版本标记代码集成到我的 awk 程序中,然后它应该是完整的。我回答的要点是,在awk 之前使用join 可以更轻松地完成大部分工作。
【解决方案2】:
$ cat tst.awk
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
!($1 in prev) || (curr > prev[$1])

$ awk -f tst.awk file2 file1
com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6
com.acc.invm:SendEmail 29.6.113
com.acc.invm:SendSms 12.23.65

【讨论】:

  • 它的“tst.awk”文件是如何制作的?
  • 使用您选择的文本编辑器,就像任何其他文件一样。 vi、emacs、pico 等等……你是如何创建文件的?
  • Ed Morton 上述逻辑工作正常,但想再制作 1 个文件,其中包含以下数据:file1 中的组件存在于更高版本的 file2 中。在上面的示例中,需要的是:com.acc.invm:FNS_APIPlat_BDMap 100.0.10 希望所以我很清楚我的要求。你能帮忙吗?
  • 不,您需要发布示例输入和预期输出,并在问题中正确格式化。我建议您发布一个新问题并参考这个问题,但新问题仍然与所有相关信息保持独立。
  • 我提出了一个新问题并更新了这个问题。请帮忙
猜你喜欢
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2019-08-09
相关资源
最近更新 更多