Исправьте свое printf
заявление:
awk -F'|' '
{sum[$1"|"$2]+=$3}
END{for (i in sum){printf "%s| %d\n",i,sum[i]}}
' file
Выход:
a | 0 | 33
a | 1 | 44
Это также было бы довольно простой задачей для SQL:
csvsql -d '|' -H --tables t \
--query 'select trim(a),b,sum(c) from t group by a,b' \
<(grep -v '^$' file)
Выход:
trim(a),b,sum(c)
a,0,33
a,1,44
Добавьте | tail -n+2
, чтобы удалить строку заголовка, и | csvformat -D '|'
, чтобы изменить разделитель на |
.
Выход:
a|0|33
a|1|44