スポンサーリンク

awkの列の総和と平均を求める

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

列を切り出して、順次インクリメントしていきます。

例えば、下記のin.txtがあったとします。

$ cat in.txt 
2010,1
2009,2
2010,3
2008,4
2009,4

FS変数で、2列目を切り出して、2列目の$2を順次インクリメントします。
参考:awkのFS変数で区切り文字を設定

平均は総和を行数のNR変数で割れば良いですね。
参考:awkのNR変数で行数に応じた処理をする

$ cat sample.awk 
#!/bin/sh

cat in.txt | awk '
	BEGIN{
		FS = ","
	}
	{
		sum += $2
	}
	END{
		print "sum = " sum
		print "ave = " sum / NR
	}
'

下記が実行結果になります。
$ ./sample.awk 
sum = 14
ave = 2.8

スポンサーリンク

連想配列を使う

連想配列を使って、例えば、1列目の値をindexとして、各indexに対応する2列目の値の総和を求めます。
参考:awkの連想配列の使い方(サンプルコードあり)

下記がサンプルコードになります。

$ cat sample2.awk 
#!/bin/sh

cat in.txt | awk '
	BEGIN{
		FS = ","
	}
	{
		arr[$1] += $2
	}
	END{
	        for ( i in arr ) {
	            print i "年の総和は" arr[i]
	        }		
	}
'

下記が実行結果になります。
$ ./sample2.awk 
2008年の総和は4
2009年の総和は6
2010年の総和は4

スポンサーリンク