0

我正在尝试使用 comm 命令比较两个日志,以查看哪些应用程序已安装但未删除。这是文件的示例:

安装:

2009-03-21 11:43:21 install flex-old:amd54 <none> 3.7.4a-10ubuntu1
2009-03-22 22:55:08 install libubsan0:amd54 <none> 6.3.0-1ubuntu1~14.04

删除:

2009-03-24 19:53:49 remove libubsan0:amd54 <none> 6.3.0-1ubuntu1~14.04

因此,需要发现不同的是“flex-old”行。这是我尝试过的,还有其他一些变化:

comm -23 <(sort install.txt) <(sort removed.txt) > difference.txt

这会输出所有已安装的列表,而不仅仅是与删除列表不同的列表。我也试过:

comm -3 <(sort install.txt | uniq) <(sort removed.txt | uniq) > what.txt

但是,这会输出两者中的所有应用程序,但直接在安装下删除。任何帮助表示赞赏:)

4

2 回答 2

1

您需要过滤您的内容以仅提供实际上可能comm.

  • 所示示例输入的两个文件之间的时间戳(第一列和第二列)从不完全相同。

  • 对于显示的示例输入,两个文件之间的或行永远不会相同installremove

由于此输入实际上在两个文件之间没有任何相同的行,因此问题中描述的输出是完全正确的。


只发出可能相同的有意义的列,我们最终得到:

comm -23 <(awk '{ print $4 " " $6 }' <install.txt | sort) \
         <(awk '{ print $4 " " $6 }' <removed.txt | sort)

在https://ideone.com/IheVRL看到这个运行,并且只正确发出(正确的)输出:

flex-old:amd54 3.7.4a-10ubuntu1
于 2018-02-18T04:19:58.283 回答
0

你可以试试http://stromberg.dnsalias.org/~strombrg/set-arithmetic/

我发现它比 comm 更简单,更强大。它不需要任何排序。

完全披露:我写的。

HTH。

于 2018-02-18T05:43:58.943 回答