GNU Awk 3.0.6 + multi-byte extension 1.15
あるデーターの 平均を 求める awkscr として
Pmt> cat 09_awkscr # average five grade { total = $2 + $3 + $4 + $5 + $6 avg = total / 5 print $1,avg }
データーとして
Pmt> cat grades.data john 85 92 78 94 88 andrea 89 90 75 90 86 jasper 84 88 80 92 84
試してみよう
Pmt> awk -f 09_awkscr grades.data john 87.4 andrea 86 jasper 85.6
データーの形は最初のフィールドは 名前の様である 後の 5個のフィールド は 何かの 点数であるようだ。 ということで 最初の フィールドは 計算には 含 めずに 残りの 5個の フィールドの 和を 求め それを 個数の5で 割る これ を 有る物に 代入する という操作を行った ということです。
フィールド1 フィールド2 フィールド3 フィールド4 フィールド5 フィールド6 ----------------------------------------------------------------------------- john 85 92 78 94 88 andrea 89 90 75 90 86 jasper 84 88 80 92 84 ----------------------------------------------------------------------------- $1 $2 $3 $4 $5 $6
ほたら
Pmt> bc -q
scale=5
85+92+78+94+88
437
437/5
87.40000
89+90+75+90+86
430
430/5
86.00000
(84+88+80+92+84)/5
85.60000
Ctrl +D
出力フィールドセパレータ "OFS" は 何も指定しない場合は スペース であ るが これを tab に 変更してみると
Pmt> cat 010_awkscr # average five grade BEGIN { OFS = "\t"} { total = $2 + $3 + $4 + $5 + $6 avg = total / 5 print $1,avg } Pmt> awk -f 010_awkscr grades.data john 87.4 andrea 86 jasper 85.6 Pmt> awk -f 09_awkscr grades.data /* 特に指定しない場合の結果 */ john 87.4 andrea 86 jasper 85.6 Pmt> cat 09_awkscr /* awk スクリプトは 再掲しておくと */ # average five grade { total = $2 + $3 + $4 + $5 + $6 avg = total / 5 print $1,avg } Pmt> diff -s 09_awkscr 010_awkscr 1a2 > BEGIN { OFS = "\t"}
取り敢えず こういうことです。まだ 出力の 様式を 考慮する程度には ほど 遠いのです。
にゃんたろう 拝!
GNU Awk 3.0.6 + multi-byte extension 1.15
2007年 1月 9日 (火) 21:14:27 JST 作成