Linux

awk + 計算文件中的字元串

  • January 20, 2019

我在文件 /tmp/users 使用者列表中(每個列表包含差異使用者)

例子

more /tmp/users


root
kafka
yarn
hdfs
root
root
yarn
moon
apache
start
moon
apache

我想列印出現在文件**/tmp/users**中的使用者並將它們計算為以下

預期成績

apache - 2
Hdfs - 1
Kafka - 1
Moon - 2
Root - 3
Start - 1
Yarn - 2

您可以通過此管道獲得此結果,儘管這可能不是最同質的方法:

sort /tmp/users | uniq -c | awk '{print $2 " - " $1;}'

sort對輸入進行排序,以便uniq隨後可以處理條目。他們需要被分類。最後awk生成最終報告,這是一個整容操作。(比較沒有它的輸出。)

此外,如果輸入包含空行,您可能希望跳過它們。perl派上用場:

perl -lne 'print unless /^\s*$/' in | sort | uniq -c | awk '{print $2 " - " $1;}'

這也是一個同質的 Perl 單行:

perl -lne '($s)=/(\S+)/; $a{$s}++ if $s; END {print "$_ - $a{$_}" for (sort keys %a)}' /tmp/users

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