csv의 행을 반복하여 열을 변수로 저장합니다.

csv의 행을 반복하여 열을 변수로 저장합니다.

다음으로 구성된 CSV가 있습니다.

Column1,Column2,Column3
A Existing text in Column1, A Date in Column2, A Integer in Column3
B Existing text in Column1, B Date in Column2, B Integer in Column3
C Existing text in Column1, C Date in Column2, C Integer in Column3

파일을 반복하는 동안 for 루프를 사용하여 각 줄을 변수로 저장하려고 합니다.

for i in `cat file.csv`
    do
        VARIABLE=$(echo $i && echo ", Another text")
    done

변수를 다음과 같이 저장하는 대신(예: 첫 번째 반복을 통해 VARIABLE): A Existing text in Column1, A Date in Column2, A Integer in Column3, Another text

다음과 같이 저장됩니다:

Column1,Column2,Column3
 , Another Text
A
 , Another Text
Existing
 , Another Text
text
 , Another Text
in
 , Another Text
Column1,
 , Another Text
A
 , Another Text
Date
 , Another Text
in
 , Another Text
Column2,
 , Another Text
A
 , Another Text
Integer
 , Another Text
in
 , Another Text
Column3
 , Another Text
B
 , Another Text
Existing
 , Another Text
text
 , Another Text
...(continues)

for전체 라인을 전체적으로 보는 것보다 각 작업을 순환하는 특별한 이유가 있나요?

답변1

문제는 설정입니다 $IFS.

echo -n "$IFS" | od -t c -t x1
0000000      \t  \n
         20  09  0a

의 출력은 cat모든 공백, 탭 또는 개행 문자에서 분할됩니다. 개행 문자에서만 분할하기를 원합니다. 그래서 이것은 작동합니다 :

IFS='
'
for i in `cat file.csv`
    do
        VARIABLE=$(echo $i && echo ", Another text")
    done

그러나 이것은 좋은 접근 방식이 아닙니다. 줄을 읽어야합니다. 그리고 명령 대체나 echo변수 결합도 사용해서는 안 됩니다 .

while IFS= read -r line; do
    VARIABLE="${line}, Another text"
done <file.csv

답변2

CSV에 다른 열을 효율적으로 추가하려면 CSV와 작동하는 도구를 사용해 보세요.

GoCSV~의다음에 추가이 명령을 사용하면 이 작업을 쉽게 수행할 수 있습니다.

gocsv add -n 'Column4' -t ' Another text' sample.csv

나에게주세요:

Column1,Column2,Column3,Column4
A Existing text in Column1," A Date in Column2"," A Integer in Column3"," Another text"
B Existing text in Column1," B Date in Column2"," B Integer in Column3"," Another text"
C Existing text in Column1," C Date in Column2"," C Integer in Column3"," Another text"

실제 CSV 파일로 처리되는 것을 원하지 않는 경우(앞 공백으로 인해 모든 큰따옴표가 필요함) 다음을 시도할 수 있습니다.

sed 's/.$/, Another text/' sample.csv
Column1,Column2,Column3, Another text
A Existing text in Column1, A Date in Column2, A Integer in Column3, Another text
B Existing text in Column1, B Date in Column2, B Integer in Column3, Another text
C Existing text in Column1, C Date in Column2, C Integer in Column3, Another text

하지만!, 파일에 후행/터미널 줄 바꿈이 있는 경우에만 작동합니다. 그렇지 않으면 마지막 문자(마지막 열, 마지막 행)가 삭제됩니다.

관련 정보