일부 숫자가 포함된 .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