目次 に戻る

2002 awk intro

平均を求める

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 作成


目次 に戻る

Copyright © 2004.-2007. nyantarou All Rights Reserved.