次のようにパイプで区切られたファイルがあります。
KALPESH|100|200|300
KALPESH|200|300|400
KALPESH|300|400|500
KALPESH|400|500|600
私は以下を使用しています:
awk -F"|" '{ name[$1]+=$2 } END { for (c in name) print c"|"name[c] }' earning1
これにより、列2の結果が得られます。たとえば、次のようになります。
KALPESH|1000
各列に対してこれを実行してからjoin
コマンドを使用する必要がありますが、3つの列すべての累積合計が必要です。たとえば、次のようになります。
KALPESH|1000|1400|1800
単一awkでこれを達成できますか?
ベストアンサー1
このような作業には、次のようなより専門的なツールが好まれます。datamash
$ datamash -t '|' -g 1 sum 2 sum 3 sum 4 < file
KALPESH|1000|1400|1800
またはcsvsql
ツールcsvkit
:
$ csvsql -H -d'|' --query '
select a,sum(b),sum(c),sum(d) from file group by a' file | csvformat -D'|'
a|sum(b)|sum(c)|sum(d)
KALPESH|1000|1400|1800