Linux

計運算元串的出現次數並保持最高分

  • July 6, 2018

我有一個字元串列表,例如:

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將忽略最多第一個欄位以檢查唯一性

引用自:https://unix.stackexchange.com/questions/453780