各行について計算する方法

各行について計算する方法

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

おすすめ記事