コンソール上で、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
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