我想对以下数据进行汇总,按月分组(我的亚马逊支出按月汇总):
投入:
2016-08 $5
2016-08 $10
2016-09 $7
2016-09 $6
2016-10 $7
2016-10 $5产出:
2016-08 $15
2016-09 $13
2016-10 $12我在网上看到了很多丑陋的解决方案。我希望像使用regex替换那样使用perl -pe语法(即隐式循环)。
可以这样做吗?也许可以使用一个“隐式变量”,即数组?
我想这个命令应该是这样的:
cat mydata.csv | perl -pe 's{(.*)\s*(.*)}{dict[$1] = $1 , dict[$1] += $2 }ge END { print @dict}'答案
记住,在非严格模式下,您不需要声明任何变量,包括数组。您可以使用它们,正如公认的答案所指示的那样。
发布于 2016-10-04 01:45:05
您可以使用Perl的方式与使用AWK的方式相同,并引用@F中的字段。
perl -alne '$F[1]=~tr/$//d; $tot{$F[0]} += $F[1];
END { for $d (sort keys %tot) { print "$d\t\$$tot{$d}" } }' mydata.csv请注意,您必须处理美元符号,两者都去掉它的一个加法它回来。
发布于 2016-10-04 01:14:07
-n和-p选项围绕整个程序包装了一个while (<>) { ... },但是我们并不真正希望它围绕整个程序,所以我们需要自己重新创建它(连同-a仿真):
$ perl -WE 'while (<>) { @F = split; $F[1] =~ s/\$//; $H{$F[0]} += $F[1]; } say "$_ \$$H{$_}" for sort(keys(%H))' data.txt输出:
2016-08 $15
2016-09 $13
2016-10 $12https://stackoverflow.com/questions/39842665
复制相似问题