最後のフィールドに基づいて Uniq、最後の行を保持、重複するアイテム数を追加

最後のフィールドに基づいて Uniq、最後の行を保持、重複するアイテム数を追加

次のロジックを実装するには、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

おすすめ記事