繰り返される行を切り取ります。

繰り返される行を切り取ります。

次のコマンドを使用してログファイルをgrepingしています。

grep "System has completed" my_log.log

そして、次のようなものを入手してください

2019-12-07 17:03:09.527   System has completed 0 of 15778 files
2019-12-07 17:03:20.936   System has completed 4 of 15778 files
2019-12-07 17:03:32.381   System has completed 5 of 15778 files
2019-12-07 17:03:44.053   System has completed 5 of 15778 files
2019-12-07 17:03:55.753   System has completed 21 of 15778 files
2019-12-07 17:04:07.252   System has completed 22 of 15778 files
2019-12-07 17:04:18.728   System has completed 28 of 15778 files
2019-12-07 17:04:30.181   System has completed 28 of 15778 files
2019-12-07 17:04:41.627   System has completed 28 of 15778 files

この結果をさらに処理して、完了したファイルの数が重複する行を切り取り、出力が次のようになりたいと思います。

2019-12-07 17:03:09.527   System has completed 0 of 15778 files
2019-12-07 17:03:20.936   System has completed 4 of 15778 files
2019-12-07 17:03:32.381   System has completed 5 of 15778 files
2019-12-07 17:03:55.753   System has completed 21 of 15778 files
2019-12-07 17:04:07.252   System has completed 22 of 15778 files
2019-12-07 17:04:18.728   System has completed 28 of 15778 files

複数の行が同じ数を繰り返す場合、最初の行だけが保持されます。タイムスタンプのため、すべての一意の行を単純にフィルタリングすることは不可能です。これを行う最良の方法は何ですか?

答え1

数字が常に同じ位置にあると仮定すると、以下を使用できますsort

grep "System has completed" my_log.log | sort -unk6,6

またはuniq:

grep "System has completed" my_log.log | uniq -f2

関連情報