2015-07-13 68 views
1

標準差我有10列的數據文件下面如何計算來自不同colums在shell腳本

ifile.txt 
2 4 4 2 1 2 2 4 2 1 
3 3 1 5 3 3 4 5 3 3 
4 3 3 2 2 1 2 3 4 2 
5 3 1 3 1 2 4 5 6 8 

給出我想增加11列,它會顯示各行的標準偏差沿10列。即STDEV(2 4 4 2 1 2 2 4 2 1)等等。 我能夠採取TRANSPOSE(移調),然後使用以下命令,然後重新考慮轉

awk '{x[NR]=$0; s+=$1} END{a=s/NR; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/NR); print sd}' 

任何人都可以提出一個簡單的方法,這樣我可以沿着每一行直接做的事。

回答

3

您也可以通過一次傳遞完成相同的操作。

awk '{for(i=1;i<=NF;i++){s+=$i;ss+=$i*$i}m=s/NF;$(NF+1)=sqrt(ss/NF-m*m);s=ss=0}1' ifile.txt 
2

你的意思是這樣的嗎?

awk '{for(i=1;i<=NF;i++)s+=$i;M=s/NF; 
     for(i=1;i<=NF;i++)sd+=(($i-M)^2);$(NF+1)=sqrt(sd/NF);M=sd=s=0}1' file 

2 4 4 2 1 2 2 4 2 1 1.11355 
3 3 1 5 3 3 4 5 3 3 1.1 
4 3 3 2 2 1 2 3 4 2 0.916515 
5 3 1 3 1 2 4 5 6 8 2.13542 

您只需使用字段而不是轉置和使用行。