![Soma todas as linhas de um arquivo csv](https://rvso.com/image/1552391/Soma%20todas%20as%20linhas%20de%20um%20arquivo%20csv.png)
Eu tenho arquivos .csv, com alguns números, quero obter um novo arquivo com o mesmo número de linhas e uma coluna, com a soma dos números da linha correspondente no arquivo .csv original.
Exemplo de entrada(observe os espaços em branco, espero que isso não seja um problema)
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Resultado esperado
2
4
5
6
7
Meu código(não produzindo nenhuma saída):
file_out="output.txt"
file_in="input.txt"
cmd3="sum_file=\$(awk -F, '
{
sum = 0;
for (i=1; i<=NF; i++) {
sum += \$i;
}
print sum;
}
' ${file_in})"
echo $cmd3
eval $cmd3
eval "echo ${sum_file} > ${file_out}"
Você pode propor também ferramentas diferentes do awk, mas eu ficaria feliz em saber por que meu código não funciona, talvez por causa dos espaços em branco (acho que não).
Responder1
Você não precisa de nenhum valor temporário. Basta executar awk
e redirecionar a saída para o arquivo.
file_out="output.txt"
file_in="input.txt"
awk -F, '
{
sum = 0;
for (i=1; i<=NF; i++) {
sum += \$i;
}
print sum;
}
' "${file_in}" > "${file_out}"
Responder2
awk
:
awk -F, '{sum=0; for (i=1; i<=NF; i++) {sum+= $i} print sum}' input.txt > output.txt
perl
:
perl -F, -lane '$s=0; $s+=$_ for @F; print $s' input.txt > output.txt