今までのスクリプトを実行すると例えば,
N = 10
Mean = 5.5
Variance = 8.25
S.D. = 2.87228
のような表示が得られる。これでもけっして悪くはないのだが,以下のように桁を揃えて表示したいこともある。
N                      10
Mean             5.500000
Variance         8.250000
S.D.             2.872281
 桁を揃えたいときは,以下のようにする。
#!/usr/local/bin/gawk -f

{
	data[FNR] = $0
}

END {
	for (i = 1; i <= FNR; i++) {
		mean += data[i]
	}
	mean /= FNR

	for (i = 1; i <= FNR; i++) {
		variance += (data[i]-mean)^2
	}
	variance /= FNR

	sd = sqrt(variance)

	printf "N         %15.7g\n", FNR
	printf "Mean      %15.7g\n", mean
	printf "Variance  %15.7g\n", variance
	printf "S.D.      %15.7g\n", sd
}

 
printf "N         %15.7g\n", FNR 
printf文 というもので,今までにでてきた print文 とは見かけが似ている。 しかし,printf の次にある,
"N         %15.7g\n" 
はダブルクオートの内容をそのまま表示するのではなく,これ以降の表示要素をどのように 表示するかという「書式」を表す。書式の重要な部分は %15.7g である。これは,「この位置に15桁を取り,有効数字7桁の数値を表示する」ことを意味している。表示される対象は FNR である。  しかし,このスクリプトによる表示は,
N                      10
Mean                  5.5
Variance             8.25
S.D.             2.872281
のようになる。 %15.7g という書式は,小数点以下の桁の余分な0を出力しないのである。
 小数点以下の余分な0も表示するときには %#15.7g のように,%の後に#を付ける(この機能が働かないAWKもある)。
●前へ戻る   ●次へ進む
Last modified: May 15, 2002

E-mail to Shigenobu AOKI