Мой CSV выглядит следующим образом
A 5 3
B 3 1
...
Мне нужно получить сумму всех столбцов и добавить их в новую строку в CSV, чтобы она стала
A 5 3
B 3 1
SUM 8 4
Я был Я могу сделать вывод суммы определенного столбца, выполнив awk -F',' '{sum+=$2} END {print sum}' file.csv
, но мне нужно сделать это для всей папки CSV, к которой в конечном итоге необходимо добавить сумму. Возможно также пустая строка между набором данных и столбцом «сумма», но это было бы просто бонусом.
Я программист, и я мог бы написать что-то подобное на Java, но я думаю, что AWK поможет нам быстрее.
Спасибо.
Вы могли использовать что-то вроде этого. Это работает на файлы с произвольным числом столбцов, предполагая, что первый столбец является текстом и должен иметь SUM
в строке результата вместо суммы всех значений того столбца.
$ awk '{for(i=2;i<=NF;i++)a[i]+=$i;print $0} END{l="SUM";i=2;while(i in a){l=l" "a[i];i++};print l}' data.csv > final.csv
A 5 3
B 3 1
SUM 8 4
awk
код отформатировал более читаемым способом:
{
for (i=2 ; i<=NF ; i++)
a[i] += $i
print $0
}
END {
l = "SUM"
i=2
while(i in a) {
l = l " " a[i]
i++
}
print l
}
Найденный чем-то, что сначала не работало на меня на StackOverflow https://stackoverflow.com/a/27110024/2161301
awk -F',' '{
print($0);
len=split($0,a);
if (maxlen < len) {
maxlen=len;
}
for (i=1;i<=len;i++) {
b[i]+=a[i];
}
}
END {
for (i=1;i<=maxlen;i++) {
printf("%s,", b[i]);
}
print ""
}' data.csv >> final.csv
Это по некоторым причинам добавляет другой столбец к моим данным, но это в порядке, я могу работать с этим.