假设我有一个文本文件 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
?
试试这个 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
看看 bash 的关联数组。
您可以创建日期到值的映射,然后遍历线,计算price*quantity
并将其添加到当前在映射中的值,或者如果不存在则插入它。