Soma todas as linhas de um arquivo csv

0

Eu tenho um arquivo .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. / p>

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

Saída esperada

2
4
5
6
7

Meu código (não produzindo nenhum resultado):

    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ê também pode propor ferramentas diferentes do awk, mas eu ficaria feliz em saber porque meu código não funciona, talvez por causa dos espaços em branco (eu não penso assim).

    
por Nisba 01.02.2018 / 19:33

2 respostas

2

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}"
    
por 28.02.2018 / 12:29
1

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
    
por 17.04.2018 / 22:03

Tags