古いファイルと新しいファイルを比較しますが、新しいファイルにのみ存在する行を無視しますか?

古いファイルと新しいファイルを比較しますが、新しいファイルにのみ存在する行を無視しますか?

2つのファイルがあります。

  1. oldlist- これには、ファイルのリストと各ファイルのmd5ハッシュが含まれます。これは1年前に生成されました。
  2. newlist- ファイルリストと各ファイルのmd5ハッシュも含まれています。ただし、一部のファイルが変更され(例:md5ハッシュが異なる)、いくつかの新しいファイルが追加されました。

oldlistとの間のすべての違いを確認したいが、newlistに存在しないファイルは無視したいと思いますoldlist

つまり、新しいファイルには興味がありません。前の各ファイルのmd5ハッシュを比較して、昨年変更されたファイルがあるかどうかを確認したいと思います。

頑張りました違いそしてコミュニケーションしかし、まだ解決策を見つけることができませんでした。

ベストアンサー1

使用join両方のファイルで一致する行をマージします。ファイル名が(出力に示されているように)チェックサムの後にあり、空白がないと仮定するmd5sumと、前のチェックサムと新しいチェックサムとともに、2つのリストのすべてのファイル名が印刷されます。

join -1 2 -2 2 <(sort -k 2 oldlist) <(sort -k 2 newlist)

新しいファイルも表示するには、-aオプションをに渡しますjoin。一部の出力後処理では、チェックサムは変更されていないファイル名を削除します。

join -a 2 -1 2 -2 2 <(sort -k 2 oldlist) <(sort -k 2 newlist) |
awk '$2 != $3'

おすすめ記事