【发布时间】:2018-09-26 18:16:31
【问题描述】:
我想计算我的数据文件 (data.txt) 中第 2 列 ($2) 的移动/滚动平均值,使用 5 个窗口(连续五行),然后计算第一个值和最后一个值之间的差异每个窗口使用 AWK。请在下面查看我的数据:
> cat data.txt
2001 100
2002 110
2003 120
2004 130
2005 140
2006 900
2007 910
2008 920
2009 930
2010 940
> awk 'BEGIN{size=5} {mod=NR%size; if(NR<=size){count++}else{sum-=array[mod]};sum+=$2;array[mod]=$2;print $1"\t", $2"\t", sum/count}' data.txt
2001 100 100
2002 110 105
2003 120 110
2004 130 115
2005 140 120
2006 900 280
2007 910 440
2008 920 600
2009 930 760
2010 940 920
从上面随附的输出中可以看出,我可以使用上面显示的 AWK 脚本对 2 美元(输出为 3 美元)进行移动平均。但是,如何修改上面的 AWK 脚本,以便我还可以打印出每个窗口的第一个和最后一个 $2 值之间的 $4 差值?例如,我希望上面的输出看起来像这样:
2001 100 100
2002 110 105
2003 120 110
2004 130 115
2005 140 120 120-100
2006 900 280 280-105
2007 910 440 440-110
2008 920 600 600-115
2009 930 760 760-120
2010 940 920 920-280
【问题讨论】:
-
"打印出每个窗口的第一个和最后一个 $2 值之间的 $4 差值" -- 那么你不应该有 "140-100"、"900-110" 等吗?您的意思是“打印出每个窗口的 移动平均值 和 first 价值 2 美元之间的 4 美元差异”?
标签: awk