次のコマンドを使用してログファイルを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