CSV 파일의 모든 줄을 합산합니다.

CSV 파일의 모든 줄을 합산합니다.

일부 숫자가 포함된 .csv 파일이 있습니다. 원본 .csv 파일의 해당 행 번호 합계와 동일한 수의 행과 하나의 열이 있는 새 파일을 가져오고 싶습니다.

입력 예(공백에 주의하세요. 문제가 되지 않기를 바랍니다.)

 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

예상 출력

2
4
5
6
7

내 코드(어떤 출력도 생성하지 않음):

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

awk와 다른 도구를 제안할 수도 있지만 공백 때문에 내 코드가 작동하지 않는 이유를 알고 싶습니다(그렇지 않다고 생각합니다).

답변1

임시 값은 필요하지 않습니다. 실행 awk하고 출력을 파일로 리디렉션하면 됩니다.

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

답변2

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

관련 정보