2016-09-26 19 views
0

awkは、hereのように列の平均を見つけるために使用できます。たとえば、2番目の列の平均を計算したいとしますが、特定の行の間の要素のみを計算したいとしましょう(たとえば、行2から6まで)。これを行う方法?特定の間隔で列データの平均を見つける

+1

あなたの質問を読んでから、不足している情報を入力してください。 –

+0

@エドモートン:「How to to ask」セクションに進みました。しかし、私は欠けている情報が何であるか正確には分かりません。任意の特定のポインタ? –

答えて

1

解決策が見つかりました。 awkは、通常、行番号を示すレコードの数を意味するパラメータFNRを持っています。これをkarakfaのsolutionで使用してください:

0

試してみてください。

$ awk -v s=2 -v e=6 '{if(($2>=s)&&($2<=e)){sum+=$2;n++}}END{print (n!=0)?sum/n:0}' input.txt 

説明:

#!/bin/awk 

BEGIN { 
    start = 2 
    end = 6 
} 

{ 
    if(($2 >= start) && ($2 <= end)) 
    { 
     sum = sum + $2 
     n = n + 1 
    } 
} 

END { 
    print (n!= 0) ? sum/n : 0 
} 

#eof# 

はそれが役に立てば幸い!

+0

awkを学ぶには、Arnold RobbinsのEffective Awk Programming、第4版を読んでください。 AwkはCではありません。 –

+1

'NR'は集計されたレコード数ではありません!平均計算には実際の数を使用する必要があります。 – karakfa

+0

@エドモートン:頭脳のような慣用句! – Lacobus

2
$ awk '$2>=2 && $2<=6 {sum+=$2; count++} 
        END {print (count?sum/count:"N/A")}' file 
+0

これは、科学的フォーマットのデータでは機能しません。たとえば、+ 5.68902179E + 00 –

+0

科学的な形式を含む変更はありますか? –

+0

私の質問には明確さが欠けていたことに気付きました。私は編集をしました。私が意味するのは、特定の値の間の列ではなく、特定の行間隔の間の列にアクセスすることです。 –

関連する問題