假设我在文件数据中有三列数据.dat(xaxis,yaxis和yerror)
1 21.0 0.1
2 22.0 0.2
3 23.0 0.1
4 24.0 0.2
5 25.0 0.1
6 26.0 0.2
我想用 binwidth=2 来装箱上述数据并生成一个文件data2.dat如下所示:
1.5 21.5 0.15
3.5 23.5 0.15
5.5 25.5 0.15
有没有一个笨拙的衬里可以有效地完成上述工作。我对awk完全陌生,所以一些指向正确方向的评论也会很有用。
我发现这个答案很有用:它可以完成工作。https://stackoverflow.com/a/18650198/2047639
虽然这可能不是最好的方法,但我希望给你一些指导方针:
awk -v var=2 'BEGIN{count=var;c1=c2=c3=0;} #code executed only at the beginning of the script
{ # This block is applied to all the records which by default is a line
if(count>0){ #notice the c style if
c1+=$1;c2+=$2;c3+=$3; #again c style increment
count--
}
else{
printf "%-3s %5s %5sn",c1/var,c2/var,c3/var # Again notice any similarity with c?
count=var;
c1=$1;c2=$2;c3=$3
count--;
}
}
END{ #This block will be executed only after processing all the records
printf "%-3s %5s %5sn",c1/var,c2/var,c3/var
}' yourfile
-v
选项有助于将变量从 shell 变量或用户定义的变量传递到 awk。
输出
1.5 21.5 0.15
3.5 23.5 0.15
5.5 25.5 0.15
AWK 编程的综合指南可在以下网址获得[ GNU 网站 ]。
注意:我使用var
传递了垃圾箱宽度