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
ここではどのように計算しますか?
ところで、名前が一意ではないので、配列[net]のインデックスを作成しようとしてforループを試しました。
私の予想結果は次のとおりです。
1 Jackson net = 11000
2 Paul net = 3000
3 Louis net = 3300
ベストアンサー1
$ 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