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)
$ 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)