Text-Processing
如何對每一行進行計算
當讀入 shell 時,我有一個 csv 數據文件,例如:
name,income,reward,payment Jackson,10000,2000,1000 Paul,2500,700,200 Louis,5000,100,1800
我想找到每個人的淨收入,使用公式:“淨=收入+獎勵支付”。
當我使用命令執行此操作時,它只計算第一行數據。
$ cat data.csv | awk -F ',' '{for (i=1;i<=NF;i++) net[i] = $2+$3-$4} END {for (p in total) print p, "net = ", net[p]}' > result.txt
我如何在這裡進行計算?
順便說一句,名稱不是唯一的,所以我嘗試(for循環)為數組創建索引
$$ net $$. 我的預期輸出是:
1 Jackson net = 11000 2 Paul net = 3000 3 Louis net = 3300
$ awk -F, -v OFS=, 'NR>1 { print $1, $2+$3-$4 }' data.csv Jackson,11000 Paul,3000 Louis,3300
或者,如果您希望將網路與(更新的)標題行一起附加到現有數據:
$ awk -F, -v OFS=, 'NR==1 {print $0,"net"}; NR>1 {print $0, $2+$3-$4}' data.csv name,income,reward,payment,net Jackson,10000,2000,1000,11000 Paul,2500,700,200,3000 Louis,5000,100,1800,3300
這樣做:
$ awk 'BEGIN{ FS=OFS="," } { $5=NR>1?$2+$3-$4:"net" }1' infile name,income,reward,payment,net Jackson,10000,2000,1000,11000 Paul,2500,700,200,3000 Louis,5000,100,1800,3300
或更新後的預期輸出:
$ awk -F, 'NR>1{ print NR-1, $1, "net= " $2+$3-$4 }' ifnile 1 Jackson net= 11000 2 Paul net= 3000 3 Louis net= 3300