5

この形式の大きなデータセットがあります

HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87
HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87

列 5 から行末まで、string を無視して、各行の平均を計算したいと思いますNA。次に、各行の末尾に平均を追加します。

出力は次のようになります。

HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 0.775
HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 0.620

このような合計を取得していますが、平均を計算するために、合計された整数の数を追跡する方法がわかりません。

awk '{x=0;for(i=5;i<=NF;i++)x=x+$i;print $0, x}'
4

3 に答える 3

5
$ cat file
HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87
HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87
HF TLLM A T NA NA NA NA NA NA NA

$ awk '{sum=cnt=0; for (i=5;i<=NF;i++) if ($i != "NA") { sum+=$i; cnt++ } print $0, (cnt ? sum/cnt : "NA") }' file
HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 0.77525
HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 0.6204
HF TLLM A T NA NA NA NA NA NA NA NA

三項式は、すべてのデータ フィールドが「NA」である入力行 3 でのゼロによる除算エラーを回避します。

于 2013-11-14T17:18:11.797 に答える
1

を使用するawkと、次のことができます。

awk '{for (i=5;i<=NF;i++) {if ($i!="NA") t++;a+=$i}print $0,a/t;a=t=0}' file
HF TLLL A T 0.999 NA 0.666 NA 0.566 NA NA 0.87 0.77525
HF TLLM A T 0.500 0.500 0.666 0.566 NA NA 0.87 0.6204
于 2013-11-14T17:19:31.040 に答える