不規則な列を持つすべての数値の平均を求めます。

不規則な列を持つすべての数値の平均を求めます。

awk不規則な熱を処理できますか?つまり、各列の値の数が異なる場合がある以下のファイルがあります。

すべての正の値の平均を見つける方法は?

不完全な行にはスペース/スペースが含まれていないため、そのスペースを置き換えるためにsed使用することはできません。

1 2 3 7
4 5
5 0
0 8 9
0

以下のように一般ファイルの平均を取得する方法を知っていますが、最後の行が不完全な場合(4桁)は機能しません。また、以下のコードは各列の平均のみを個別に印刷できます。

各列の平均ではなく、ゼロ以外のすべての数値の平均が必要です。

これを使用awkまたはpython実行する方法は?

私の予想される出力は数値です。4.888888889
((1+2+3+7+4+5+5+8+9)/9=4.888888889)

awk '{for (i=1;i <= NF; i++) if ($i>0) { sum[i] += $i; num[i]++; } } END { for(i =1;i <= NF; i++) print i, sum[i]/num[i]}' $infile

ベストアンサー1

すべての列のすべての数値の平均が必要な場合は、これは簡単です。

awk '   { for (i=1;i<=NF  ;i++){ sum+=$i;num++} }
     END{ print(sum/num) } ' infile

列あたりの平均が必要な場合は、列の最大数を追跡します。

awk '   {for (i=1;i<=NF  ;i++){ if(maxF<NF){maxF=NF};sum[i]+=$i;num[i]++} }
     END{for (i=1;i<=maxF;i++){ print(i,sum[i]/num[i]) } } ' infile

おすすめ記事