次のロジックを実装するには、bashスクリプトでawkコマンドを実装するのに役立ちます。ソート/ユニークな組み合わせを試しましたが、成功しませんでした。
以下に示すように、タイムスタンプといくつかの数字を含む長いリストがあります。
[2020-09-15 09:03:21.835335] 1021
[2020-09-15 09:03:21.935335] 1021
[2020-09-15 09:03:22.835335] 1022
[2020-09-15 09:03:25.835335] 1022
[2020-09-15 09:04:21.835335] 1023
[2020-09-15 09:05:21.835335] 1023
[2020-09-15 09:04:22.835335] 1023
[2020-09-15 09:05:23.835335] 1023
最終結果では、上の2列にあるリストを数値的に処理したいと思います。最終処理されたデータから2列の固有番号(一度だけ発生しても)を計算し、その番号の前の新しい列に追加したいと思います。実際に必要なのは、数値列で重複/固有項目が最後に発生したタイムスタンプです。
[2020-09-15 09:03:21.935335] 1021 2
[2020-09-15 09:03:25.835335] 1022 2
[2020-09-15 09:05:23.835335] 1023 4
どんな助けでも大変感謝します!
ありがとうございます!
ベストアンサー1
tac file | uniq -c -f 2 | awk '{$(NF+1)=$1;$1=""}1' | tac
tac
ファイルを逆順に印刷します。これは、最後に発生した重複行が維持されるようにするためです。
uniq -c -f 2
最初の2つのフィールドをスキップし、最後のフィールドのみを比較します-f 2
。-c
重複行数の前にフラグを追加するため、カウントを最後のフィールドに転送する必要があります。それだけですawk '{$(NF+1)=$1;$1=""}1'
。
最後に、tac
すべてを元の状態に復元します。
[2020-09-15 09:03:21.935335] 1021 2
[2020-09-15 09:03:25.835335] 1022 2
[2020-09-15 09:05:23.835335] 1023 4