Text-Processing

如何對每一行進行計算

  • May 3, 2021

當讀入 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

引用自:https://unix.stackexchange.com/questions/647677