awk+ファイルの文字列の計算 [重複]

awk+ファイルの文字列の計算 [重複]

/tmp/usersファイルにユーザーリスト(各リストには異なるユーザーが含まれています)があります。

はい

more /tmp/users


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

ファイル内のユーザーを印刷したいです。/tmp/ユーザー次のように計算します。

期待されるパフォーマンス

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

答え1

このパイプラインでこの結果を得ることができますが、最も均一なアプローチではないかもしれません。

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

sortuniq項目を処理できるように入力を並べ替えます。分類する必要があります。最終awk報告書が作成され、整形手術になります。 (それなしで出力を比較してください。)

また、入力に空白行が含まれている場合はスキップすることもできます。perl便利にご利用ください:

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

これも均質なPerlの1つのライナーです:

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

関連情報