列說我有一個文本文件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
?
列說我有一個文本文件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
?
試試這個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的associative arrays。
您可以創建一個日期到值的映射,然後遍歷線,計算price*quantity
並將其添加到當前映射中的值或插入它,如果不存在。
盡我所能,我試圖在shell中做到這一點。 – Shannon 2013-04-29 11:57:19
只是好奇,但爲什麼? – troelskn 2013-04-29 11:58:34
@troelskn,bash也是一種腳本語言。 – Shahbaz 2013-04-29 12:03:19