我有一个包含数字列的文件
4.685
5.440
5.751
4.685
3.979
在我的shell脚本中,我想查询其中的许多文件,并获得标准差和平均值
我可以轻松地使用awk
awk '{sum+=$1} END { print sum/NR}' file
使用awk进行标准偏差时
awk '{x[NR]=$0; s+=$0} END{a=s/NR; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/NR); print sd}' file
我得到0.625
。这个数字与excel不同,后者给我0.699
。我发现我可以从命令行执行R来打印出sd:
R -q -e "x <- read.csv('file', header = F); sd(x[ , 1])"
但是,这会产生稍微混乱的输出
[1] 4.908
\>
\>
我可以调整R命令只打印出数字而不需要使用head和cut / awk吗?
我的awk代码提取标准偏差有什么问题?
答案 0 :(得分:0)
我不能完全说出您的awk有什么问题,但对于R
命令,您可能会发现write
有帮助:
R -q -e "x<- read.csv('file.csv',header=FALSE)[,1] ; write(sd(x),file='result.txt')"