如何对每一行进行计算

Pol*_*sop 4 awk text-processing csv-simple

当读入shell时,我有一个类似这样的数据的csv文件:

name,income,reward,payment
Jackson,10000,2000,1000
Paul,2500,700,200
Louis,5000,100,1800
Run Code Online (Sandbox Code Playgroud)

我想找到每个人的净收入,使用公式:“净=收入+报酬-支付”。

当我使用命令执行此操作时,它只计算第一行数据。

$ 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
Run Code Online (Sandbox Code Playgroud)

我如何在这里进行计算?

顺便说一下,名称不是唯一的,所以我尝试(for 循环)为数组 [net] 创建索引。

我的预期输出是:

1 Jackson net = 11000
2 Paul net = 3000
3 Louis net = 3300
Run Code Online (Sandbox Code Playgroud)

cas*_*cas 5

$ awk -F, -v OFS=, 'NR>1 { print $1, $2+$3-$4 }' data.csv 
Jackson,11000
Paul,3000
Louis,3300
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望将网络附加到现有数据,以及(更新的)标题行:

$ 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
Run Code Online (Sandbox Code Playgroud)