2016-05-27 2 views
-1

9990,9999,9999000,999999など多くの種類の欠損値を持つデータセットがあります。しかし、すべてが9990を超えています。私は各24の値の平均をとってみたいと思います。私は次のコマンドで試していますが、私の欲望の出力は得られません。例えばシェルスクリプト内の指定された条件を満たす場合の平均を計算する

awk '{if ($1 < 9990) sum += $1; count++} NR%24==0{print count ? (sum) :9999;sum=count=0}'ifile 

:私は、次のデータ

3 
3 
4 
9999 
4 
99990 
13 
3 
999999 
9999 
9991 
99954 

に各3行の平均を必要と私はこれを試みたが、異なる結果を示す:

awk '{if ($1 < 9990)sum += $1; count++} NR%3==0{print count ? (sum/count) :9999;sum=count=0}'ifile 

マイ欲求出力

あります
3.33 
4  Average of 9999 4 99990 is done with 4/1. Because 9999 and 99990 are undefined values. 
8 Average of 13 3 999999 is done with (13+8)/2. Because 999999 is an undefined value, so excluded from the average. 
9999 All are undefined values, so denoted as 9999. 
+1

9999,9991,99954の平均値が9999に等しいのはなぜですか?それ以外の場合は9990を超える値が無視されるのはなぜですか? –

+0

あなたのawkスクリプトは、9990より大きい合計行しかありません。また、24または3の値の平均が必要ですか? 24では、サンプルデータに十分なデータがありません。 –

+0

はい。私は今修正した。しかし、まだ欲望の結果を印刷していない。 – Kay

答えて

2
$1 < 9990 { 
    sum += $1; 
    count++; 
} 
NR % 3 == 0 { 
    if (count == 0) { 
     print "9999"; 
    } else { 
     print sum/count; 
    } 
    sum = 0; 
    count = 0; 
} 

値が「未定義」の場合は、間違ってcountを増やすことです。あなたは

{if ($1 < 9990) sum += $1; count++} 

を書く場合、if文は次のセミコロンではなく、閉じ括弧で終了します。

関連する問題