commを使用して要素は同じですが、タイムスタンプが異なるログファイルと一致する方法は何ですか?

commを使用して要素は同じですが、タイムスタンプが異なるログファイルと一致する方法は何ですか?

どのアプリケーションがインストールされたが削除されていないかを確認するために、commコマンドを使用して2つのログを比較しようとしています。可能であれば、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

したがって、差別化のために注目すべきは、まさに「フレックスオールド」シリーズだ。いくつかの他のバリエーションを含め、私が試したことは次のとおりです。

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

その後(私の経験では)追加のテストなしでコードを1行書き直すことができました。失敗した場合は、基本的なテストをしてcomm何が問題なのかを調べますが、今回は必要ありません。

関連情報