РЕДАКТИРОВАТЬ 2: Так как OP имеет старый awk
, где FPAT
не существует, поэтому в соответствии с образцами я добавил следующий код.
awk -F, '{gsub(/\r/,"")} FNR>1{gsub(/"/,"",$8);gsub(/"/,"",$6);a[$6]+=$8} END{for(i in a){print i,a[i] | "sort -k1"}}' Input_file
РЕДАКТИРОВАТЬ: Поскольку OP полностью изменил Input_file, поэтому добавим это решение сейчас. Написано и протестировано с GNU awk
.
awk -v FPAT='[^,]*|"[^"]+"' '
gsub(/\r/,"")
FNR>1{
gsub(/"/,"",$8)
gsub(/"/,"",$6)
a[$6]+=$8
}
END{
for(i in a){
print i,a[i]
}
}
' Input_file
ИЛИ для сортировки вывода в алфавитном порядке попробуйте следующее.
awk -v FPAT='[^,]*|"[^"]+"' '{gsub(/\r/,"")} FNR>1{gsub(/"/,"",$8);gsub(/"/,"",$6);a[$6]+=$8} END{for(i in a){print i,a[i] | "sort -k1"}}' Input_file
Вы были близки, проблема с вашимПодход состоит в том, что вы не установили разделитель полей как ,
в своем коде, но ваш Input_file имеет разделитель как ,
, поэтому он вообще не имеет $3
и, следовательно, не работает. Не могли бы вы попробовать следующее.
awk -F"[[:space:]]*,[[:space:]]*" 'FNR>1{a[$3]+=$4} END{for(i in a){print i,a[i]}}' Input_file
PS: Спасибо oguz ismail за сообщение о наборе разделителей полей.