说我有一个文本文件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
?
答案 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
并将其添加到当前地图中的值,或者如果不存在则插入它。