如何使用comm匹配具有相同元素但不同时间戳的日志文件?

如何使用comm匹配具有相同元素但不同时间戳的日志文件?

我正在尝试使用 comm 命令来比较两个日志,以查看哪些应用程序已安装但未删除。如果可能的话,我不想为此使用 awk。以下是文件示例:

安装:

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 <(cut -d " " -4f sort install.txt | uniq) <(sort removed.txt | uniq) > what.txt

但是,这会输出两者的所有应用程序,但会直接在安装下删除。

答案1

看来你离我很近。根据您的样品,以下 1 内衬:

comm -23 <(sort install.txt | cut -d" " -f4) <(sort removed.txt | cut -d" " -f4)

为我生成了这个输出:

flex-old:amd54

注意:您可能想要调整comm -23.例如,comm -3这里可能就是您所需要的。

我做了什么来测试。首先,我分解了你的命令来测试它们。我开始于:

cut -d " " -4f sort install.txt

这显然被破坏了,所以我将其修复为:

sort install.txt | cut -d" " -f4

之后(根据我的经验),我能够重写你的一行代码而无需进一步测试。如果失败,我会执行基本测试来看comm看出了什么问题,但这次没有必要:]

相关内容