awk配列の計算と合計(および平均)

awk配列の計算と合計(および平均)

日付と特定の数量の対応する測定値を含むデータファイルがあります。完全なファイルは13年分で、約4500のデータポイントを含みます。以下にフォーマットの例を示します。毎日測定する必要はありません。つまり、一部の日付は、「pbl」というタイトルのデータ列の空の値に対応します。

データセットの各年の観測値の数(つまり、ゼロ以外の値の数)と合計を計算したいと思います。その後、これを毎月繰り返します。ちょっとしたチートを書くために、日付全体を「年」と「月 - 年」に減らす列を追加することで、作業を簡単にしました。

私はawkを使用しており、正しく合計できます。問題は計算です。現在、私のawk行は年間(または月)あたりの日数を計算し、いいえ観測値の数。したがって、データセット全体に対して「365」または「366」を取得します。これは、日付列にリストされているアイテムの総数です。私が得たいのは、「に対応する測定値を持つ日付の数です。pbl」列です。

私の直感は、どこかに「ゼロ以外の項目」の条項を含めるか、$ 2の代わりに$ 4を使用する必要があるということですが、どうすればいいのかわかりません。どんなアドバイスにも感謝します!

私のコード:

awk -F, '{a[$2]++; count[$2]+=$NF}END{for (i in a) print i,a[i],count[i]}' data.csv

私のデータ(サンプル):

「日付」、「年」、「月-年」、「pbl」

2004年5月12日、「12-2004」、960.295

2004年6月12日、「12-2004」、

2004年13月12日、「12-2004」、911.774

2004年12月4日、「12-2004」、2804.06

2004年12月4日、「12-2004」、4453.56

2005年1月1日、「01-2005」、1326.38

2005年7月1日/05、「01-2005」、

2005年8月1日/05,"01-2005",604.919

2005年9月1日/05,"01-2005",755.006

2005年10月1日、「01-2005」、

2005年11月1日、「01-2005」、978.818

2005年12月1日、「01-2005」、

2005年13月1日、「01-2005」、1644.87

2005年4月5日29日、「04-2005」、3630.62

2005年4月5日30日、「04-2005」、3780.11

2005年1月5日、「05-2005」、1262.66

2005年2月5日/05,"05-2005",

2006年2月6日14日、「02-2006」、5667.58

2006年2月6日15日、「02-2006」、2696.56

2007年7月23日、「07-2007」、1276.06

2007年7月24日、「07-2007」、

ベストアンサー1

値が次の行だけを処理するだけです$4

awk -F, '$4 {a[$2]++; count[$2]+=$NF}END{for (i in a) print i,a[i],count[i]}' data.csv

これはうまくいきます。

$4 {a[$2]++; count[$2]+=$NF}

ブロックがtrueと評価された行でのみ実行されるようにします$4つまり$4空ではなくゼロでもありません。

おすすめ記事