AWK演習1
まずUNIX上で、AWKをどうやって実行するのかから始めたいと思います。
ちなみに僕が利用した環境はワークステーションです。
データファイルをどのように処理していくのかを確認していきたいと思います。
とりあえず、ユーザディレクトリのしたに、作業ディレクトリawkを作ってください。
これからは、そこで作業しているものと仮定することにします。
まず、テキストデータを用意します。
ここでは日本人男性の身長を仮定した
japanmenheight1.data(<−クリックしてダウンロードしてください)
を利用することにします。
(コピーアンドペーストで、Muleなどのエディタにでも貼り付けて保存してください。)
これは、僕が勝手に乱数で作ったものなので、実際に観測されたデータではありませんのでご注意下さい。
このデータがどのように散らばっているかにまず興味があるので、まずこれを階級別に整理していくことにします。
階級別に集計するプログラムを作るのが目的です。
具体的には、160〜165までの中には何人いるか?175〜180までの中には何人いるか?、ということを集計、つまりカウントしていくわけです。
プログラム例を以下に示します。
{
for (i = 1; i <= NF; i++) {
$i=int($i/5)*5
height[$i]++
}
}
END {
for (i in height) {
print i "-" i+5, height[i]
}
}
<解説>
まず、入力データを読み込みます。空のパターンを使います。
空白で区切られているレコード数をNFという組みこみ変数で認識して、ループを繰り返し$iに代入しています。ここでは階級幅は5としています。
そして関数intをうまく使って、小数点以下を切り捨て、階級の下の値(165〜170だったら165に変換)に変換していきます。
そして配列height[ ]を用いて、+1していく、つまりカウントしていきます。
配列heightの個数分だけループを繰り返すと言うわけです。
次にENDパターンでモニターに出力していきます。
分かりやすくするため、-は””で囲んでやることによって結果を表示できます。
このプログラムを例えば、height1.awkという名前で保存します。
実行するときは、
awk -f filename.awk filename.data
で実行します。結果をソートするときには、| sortをつけてください。
すると次のような結果になったと思います。
(以下は実行例)
user:~/awk% awk -f height1.awk japanmenheight1.data | sort
140-145 1
145-150 1
150-155 1
155-160 16
160-165 25
165-170 37
170-175 34
175-180 25
180-185 8
185-190 2
それぞれの階級でうまくカウントされていることが分かります。
さて次の演習2では、この文字を連結させてヒストグラムを作ることにします。
参考HP
群馬大学青木氏のHP、AWK
こちらの方がかなり詳しいのでお勧めです。
演習1のプログラムはこちらを参考にさせていただきました。ありがとうございました。
演習2に進む
AWKの文法のページに戻る
もとのホームページに戻る