使用 awk 对带有误差线的数据列进行装箱



假设我在文件数据中有三列数据.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传递了垃圾箱宽度

相关内容

  • 没有找到相关文章

最新更新