![如何使用comm匹配具有相同元素但不同时间戳的日志文件?](https://linux22.com/image/127891/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8comm%E5%8C%B9%E9%85%8D%E5%85%B7%E6%9C%89%E7%9B%B8%E5%90%8C%E5%85%83%E7%B4%A0%E4%BD%86%E4%B8%8D%E5%90%8C%E6%97%B6%E9%97%B4%E6%88%B3%E7%9A%84%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在尝试使用 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
看出了什么问题,但这次没有必要:]