基于另一列总计列

时间:2013-04-29 11:52:30

标签: bash awk

说我有一个文本文件items.txt

Another Purple Item:1:3:01APR13
Another Green Item:1:8:02APR13
Another Yellow Item:1:3:01APR13
Another Orange Item:5:3:04APR13

第二列是价格而第三列是数量。我怎么能在bash中循环使用这个,这样每个唯一的日期总共有price * quantity

2 个答案:

答案 0 :(得分:2)

尝试这个awk one-liner:

awk -F: '{v[$NF]+=$2*$3}END{for(x in v)print x, v[x]}' file 

结果:

01APR13 6
04APR13 15
02APR13 8

编辑排序

正如我评论的那样,有两种方法可以按日期对输出进行排序,我只想采用更简单的方法:^ _ ^:

kent$  awk -F: '{ v[$NF]+=$2*$3}END{for(x in v){"date -d\""x"\" +%F"|getline d;print d,x,v[x]}}' file|sort|awk '$0=$2" "$3'
01APR13 6
02APR13 8
04APR13 15

答案 1 :(得分:0)

看一下bash的associative arrays

您可以创建日期值到地图,然后遍历各行,计算price*quantity并将其添加到当前地图中的值,或者如果不存在则插入它。