Linuxコンソール上でXX点台の件数を集計する
Pocket

コンソール上で、awkを使ってテストの点数などを10点台が何件、30点台が何件といった集計を行ってみる。
ある程度汎用性のあるように記述すると、以下のようにすることで〇桁(以下の例では2桁)での件数集計を行う。

yes 'n=100;echo $(( (RANDOM % ( $n + 1 )) + 0 ))' | bash | head -1000 > test.txt # 1-100までのランダムな数字を1000件出力
awk '{sub(/.$/,0,$NF);print $NF}' test.txt | sort -n | uniq -c
blacknon@BS-PUB-UBUNTU-01:~$ yes 'n=100;echo $(( (RANDOM % ( $n + 1 )) + 0 ))' | bash | head -1000 > test.txt
blacknon@BS-PUB-UBUNTU-01:~$ awk '{sub(/.$/,0,$NF);print $NF}' test.txt | sort -n | uniq -c
     98 0
     90 10
     86 20
    119 30
    100 40
    100 50
     75 60
     97 70
    111 80
    112 90
     12 100
Sponsored Links

1-800までの数字に対して、100点台・200点といった風に集計する場合は、桁数の問題があるので以下のように記述するとよいだろう。

yes 'n=800;echo $(( (RANDOM % ( $n + 1 )) + 0 ))' | bash | head -10000 > test.txt # 1-800までのランダムな数字を10000件出力
awk '{sub(/^.$/,0,$NF);sub(/..$/,0,$NF);printf("%d\n",($NF*10))}' test.txt | sort -n | uniq -cz
blacknon@BS-PUB-UBUNTU-01:~$ yes 'n=800;echo $(( (RANDOM % ( $n + 1 )) + 0 ))' | bash | head -10000 > test.txt # 1-800までのランダムな数字を10000件出力
blacknon@BS-PUB-UBUNTU-01:~$ awk '{sub(/^.$/,0,$NF);sub(/..$/,0,$NF);printf("%d\n",($NF*10))}' test.txt | sort -n | uniq -c
   1220 0
   1236 100
   1263 200
   1275 300
   1250 400
   1286 500
   1258 600
   1206 700
      6 800

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。