Bash
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
任何幫助將不勝感激!
謝謝!
tac file | uniq -c -f 2 | awk '{$(NF+1)=$1;$1=""}1' | tac
tac
以相反的順序列印文件。這是為了保證最後一次出現的重複行將被保留。
uniq -c -f 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