比较旧文件和新文件,但忽略只存在于新文件中的行?

Ste*_*ski 8 diff text-processing file-comparison join

我有两个文件:

  1. oldlist- 这包含文件列表和每个文件的 md5 哈希。这是一年前生成的。
  2. newlist- 这还包含文件列表和每个文件的 md5 哈希值。但是,一些文件已更改(例如,它们的 md5 哈希值不同)并添加了一些新文件。

我想查看oldlist和之间的所有差异newlist,但我想忽略oldlist.

也就是说,我不关心新文件。我只想比较每个旧文件的 md5 哈希值,以便我可以查看去年是否有任何文件发生了更改。

我试过diffcomm,但还没有找到解决方案。

Gil*_*il' 5

使用join结合匹配来自这两个文件的行。假设文件名在校验和之后(如在md5sum输出中)并且不包含空格,这将打印两个列表中存在的所有文件名,以及旧校验和和新校验和:

join -1 2 -2 2 <(sort -k 2 oldlist) <(sort -k 2 newlist)
Run Code Online (Sandbox Code Playgroud)

要同时查看新文件,请将-a选项传递给join. 一些输出后处理将删除校验和未更改的文件名。

join -a 2 -1 2 -2 2 <(sort -k 2 oldlist) <(sort -k 2 newlist) |
awk '$2 != $3'
Run Code Online (Sandbox Code Playgroud)