列の平均を計算して別の列にエクスポートします。

列の平均を計算して別の列にエクスポートします。

以下のtxtファイルがあります(このイメージは.csvバージョンのイメージです)。私がしたいことは、月の平均(列7から列10まで)を取り、これを新しい列にエクスポートすることです。しかし、それは私に平均だけを与えます。

OBSERVATORY,Abbreviations,COUNTRY,ALTITUDE(m),LONGITUDE(deg),LATITUDE (deg),January,February,March,April,May,June,July,August,September,October,November,December
Beverly-Begg Observatory Dunedin,,New Zealand,140,170.49,-45.8644,89.93,86.84,85.26,88.22,89.36,89.8,88.52,90.42,88.74,89.06,91.16,91.36
Aorangi Iti Observatory Lake Tekapo,,New Zealand,718,170.473,-44.0082,63.92,60.44,58.63,65.68,75.97,85.7,84.85,83.7,76.34,70.56,70.2,70.4
Mount John Observatory Lake Tekapo,,New Zealand,945,170.465,-43.9874,62.4,60.91,58.98,67.15,79.45,85.24,86.93,84.96,77.1,72.0,70.9,71.85

私のコードは次のとおりです

awk '{ sum += $5 + $6 + $7 + $8 + $9 + $10 + $11 + $12 + $13 + $14
+ $15 } END { print sum / (NR * 18) }' observatory_1.txt > observatory_3.txt


output: 0.104394

次のtxtフォルダを作成したいと思います。

OBSERVATORY, Abbreviations, COUNTRY, ALTITUDE(m), LONGITUDE(deg), LATITUDE (deg), MEAN
Beverly-Begg Observatory Dunedin, , New Zealand,  140, 170, 490, -45,8644, 89,05583333

どんなアドバイスも本当にありがとうございます。

ベストアンサー1

スクリプトは、各入力行の複数の列を合計してから、すべての入力行を読み取った後、ENDブロックが出力行を印刷するため、出力を生成する前にファイル全体を処理します。

あなたがすべきことは、各入力ラインを個別に処理することです。

列番号も間違っているようです。たとえば、平均計算に高度、経度、緯度を含めるのはなぜですか?実際に7~19列(1月~12月)の平均が欲しいと仮定します。

とにかく、おそらく次のようなものがもっと欲しいでしょう。

awk -F, -v OFS=, '
     NR == 1 { print $1, $2, $3, $4, $5, $6, "MEAN" }
     NR  > 1 {
       sum = 0;
       for (i=7; i<=19; i++) { sum += $i }
       print $1, $2, $3, $4, $5, $6, (sum / 12)
     }' observatory_1.txt > observatory_3.txt

これにより、次のような出力が生成されます。

OBSERVATORY,Abbreviations,COUNTRY,ALTITUDE(m),LONGITUDE(deg),LATITUDE (deg),MEAN
Beverly-Begg Observatory Dunedin,,New Zealand,140,170.49,-45.8644,89.0558
Aorangi Iti Observatory Lake Tekapo,,New Zealand,718,170.473,-44.0082,72.1992
Mount John Observatory Lake Tekapo,,New Zealand,945,170.465,-43.9874,73.1558

これはまさにあなたが望むものではないかもしれませんが、正しい方向に進むステップでなければなりません。

おすすめ記事