とある集計用のスクリプトで複雑なことをやっていて、「それ awk でできるよ」と思ったので
基本
sample-1.txt
3
4
5
6
こういうファイルがあった時に
$ awk '{s += $1} END {print s}' < sample-1.txt
18
という具合に集計できる。
カラムが複数
sample-2.txt
1 5
2 6
3 7
4 8
みたいにカラムが 2 つあっても簡単。
$ awk '{a += $1; b += $2} END {print a, b}' < sample-2.txt
10 26
3 つ以上の時も同じように伸ばして行けば OK
応用
sample-3.txt
a
a
a
a
a
a
a
b
b
b
c
普通に sort | uniq -c すると空白で整形されて出力される。
$ sort -n < sample-3.txt | uniq -c
7 a
3 b
1 c
awk 使えば整形してさらに合計を出したりできる。
↓ の結果はカラムを並び替え、「計」をつけてみた。
$ sort -n < sample-3.txt | uniq -c | awk '{a+=$1; print $2, $1} END {print "計”, a}'
a 7
b 3
c 1
計 11
個人的には、 Perl ワンライナーよりも覚えやすいと感じるので重宝している。