項目ごとの数を数える gawk スクリプト、ただし入力はソート済
a a a b c c
というデータの場合に、a が 3 個、b が 1 個、c が 2 個、のように項目ごとの数を数える awk のイディオム。入力ファイルはソートしておく。とりあえず第一フィールドについてカウントするもの。
{ if (prev != "" && prev != $1) { printout(); } counter++; prev = $1; } END { printout(); } function printout() { print prev, counter; counter = 0; }
実行結果は
a 3 b 1 c 2
追記
ワンライナー用のも貼っておこう。コピペして使えるように。
awk '{if(p!=""&&p!=$1)v();c++;p=$1}END{v()}function v(){print p,c;c=0}'
追記 2009-11-26
ワンライナー的には関数を使わないのが正解かも。
awk '{if(p!=""&&p!=$1){print p,c;c=0};c++;p=$1}END{print p,c}'
追記 2009-12-06
コメントを受けてタイトルに「ただし入力はソート済」を追加した。