どのアプリケーションがインストールされたが削除されていないかを確認するために、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
何が問題なのかを調べますが、今回は必要ありません。