다음으로 구성된 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
하지만!, 파일에 후행/터미널 줄 바꿈이 있는 경우에만 작동합니다. 그렇지 않으면 마지막 문자(마지막 열, 마지막 행)가 삭제됩니다.