Linux
計運算元串的出現次數並保持最高分
我有一個字元串列表,例如:
StringA 45 StrinB 98 StringA 35 StringA 83 StrinB 78 StringC 65 StrinB 98
我想過濾掉重複項,列印出現次數(子字元串的長度可以不同,但一側由 ^(字元串開頭)分隔,另一側由 \tab 分隔)加上僅列印最高數字發現與字元串相關聯,即我希望輸出類似於(字元串、出現次數和分數也可以以不同的順序出現):
3 83 StringA 3 98 StrinB 1 65 StringC
我知道我可以使用 和 的組合對
sort
相同uniq
的事件進行排序並刪除重複項,但這不考慮不同的“分數”。我想知道如何在忽略分數的同時進行排序,然後在跟踪最高分數的同時過濾掉重複項。
這可以自己完成
awk
:awk '{ max[$1]=( max[$1]>$2?max[$1]:$2 ); seen[$1]++ } END{ for (x in seen) print seen[x], max[x], x }' infile 3 98 StrinB 3 83 StringA 1 65 StringC
嘗試,
awk '{print $2" "$1}' file.txt | sort -k2 -rk1 | uniq -f1 -c | awk '{print $3" "$1" "$2}'
-k2
將對第二個欄位進行排序。-rk1
將對第一個欄位進行反向排序。-f1
將忽略最多第一個欄位以檢查唯一性