0

假设我有一个文本文件 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

其中第 2 列是价格,第 3 列是数量。我怎么能在 bash 中循环这个,以便每个唯一日期总共有price * quantity?

4

2 回答 2

2

试试这个 awk 单线:

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
于 2013-04-29T11:58:41.037 回答
0

看看 bash 的关联数组

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

于 2013-04-29T11:56:55.533 回答