Sumar todas las líneas de un archivo csv

Sumar todas las líneas de un archivo csv

Tengo archivos .csv, con algunos números, quiero obtener un nuevo archivo con el mismo número de filas y una columna, con la suma de los números de la fila correspondiente en el archivo .csv original.

Ejemplo de entrada(tenga en cuenta los espacios en blanco, espero que esto no sea un 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

Rendimiento esperado

2
4
5
6
7

Mi código(sin producir ningún 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}"

También puedes proponer herramientas diferentes a awk, pero me encantaría saber por qué mi código no funciona, tal vez por los espacios en blanco (no lo creo).

Respuesta1

No necesita ningún valor temporal. Simplemente ejecute awky redirija la salida al archivo.

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}"

Respuesta2

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

información relacionada