Ruby 列添加
我尝试根据日期和时间在列中求和(值介于“,”)之间) 例如:Ruby 列添加,ruby,bash,awk,Ruby,Bash,Awk,我尝试根据日期和时间在列中求和(值介于“,”)之间) 例如: RG Data,2015/02/27,18:02:07,"0","52",50.0,5.3,44.7,5.6,100.0,0.23,0.03,0.20,6.3,4.5 RG Data,2015/02/27,18:02:07,"1","52",36.9,22.3,14.6,39.9,100.0,0.59,0.16,0.43,7.5,29.9 RG Data,2015/02/27,18:03:06,"0","52",21.2,0.7,20
RG Data,2015/02/27,18:02:07,"0","52",50.0,5.3,44.7,5.6,100.0,0.23,0.03,0.20,6.3,4.5
RG Data,2015/02/27,18:02:07,"1","52",36.9,22.3,14.6,39.9,100.0,0.59,0.16,0.43,7.5,29.9
RG Data,2015/02/27,18:03:06,"0","52",21.2,0.7,20.5,50.0,100.0,0.08,0.00,0.08,0.0,4.2
RG Data,2015/02/27,18:03:06,"1","52",245.6,233.4,12.2,73.7,100.0,2.08,1.83,0.25,8.0,21.4
... more lines after...
输出:
RG Data,2015/02/27,18:02:07,86.9,27.6,59.3,....
RG Data,2015/02/27,18:03:06,266.8,234.1,....
其中:86.9来自:“50.0”(第1行)+36.9(第2行)。等对于每列
带awk的代码:
for TIME in $(awk -F ',|/' '{print $4","$5}' FILE | sort -u) ;do echo -n "$TIME; awk -F ',' "/$TIME/ {SUM += \$6} END { print SUM}" FILE ; done
非常感谢您的帮助此awk one liner可产生接近所需输出的效果:
$ awk -F, '{k=$1FS$2FS$3;seen[k];for(i=6;i<=NF;++i)sum[k,i]+=$i}END{for(i in seen){printf "%s,",i;for(j=6;j<=NF;++j)printf "%s%s",sum[i ,j],(j<NF?FS:RS)}}' file
RG Data,2015/02/27,18:03:06,266.8,234.1,32.7,123.7,200,2.16,1.83,0.33,8,25.6
RG Data,2015/02/27,18:02:07,86.9,27.6,59.3,45.5,200,0.82,0.19,0.63,13.8,34.4
$awk-F'{k=$1FS$2FS$3;参见[k];用于(i=6;i你的问题是什么?我无法理解你的第一句话。对不起,我忘了……谢谢你的回答,汤姆,很好的awk命令……但事实上,后面有几行时间不同。我编辑了我的帖子。请看我修改过的脚本。非常感谢你,汤姆,你的awk命令工作得很好!!:)