
각 경우에 열이 쉼표로 구분되는 큰 CSV 파일이 있습니다. 그러나 첫 번째 열의 약 5%에는 자체적으로 쉼표가 포함되어 있으며 이러한 필드 내부에 쉼표가 있는 경우 필드 주위에 따옴표가 있다는 사실로 표시됩니다.
쉼표가 따옴표 안에 포함될 때마다 구분 기호로 취급하지 않도록 이 파일을 읽는 좋은 방법은 무엇입니까?
제가 생각하는 가장 좋은 방법은 스택을 사용하여 복잡한 작업을 수행하거나 현재 견적 범위 내에 있는지 확인하는 것이지만 더 쉬운 방법이 분명 있을 것이라고 생각합니다. 참고: 인용문 안에 인용문이 있거나 이 이외의 다른 특수 사례는 없습니다.
*예:
- 애플, 10, 12, ....
- 바나나, 5, 10, ...
- "Banana, green", 3, 14, ... (이 줄에는 쉼표가 있지만 이를 나타내는 따옴표가 있습니다.)*
바나나와 녹색을 별도의 변수로 읽는 기본 동작보다는 이 마지막 줄에서 변수를 "Banana, green"으로 읽고 싶습니다.
답변1
FPAT용 GNU awk 사용:
$ cat tst.awk
BEGIN { FPAT="[^,]*|\"[^\"]*\"" }
{
print
for (i=1; i<=NF; i++) {
print "\t" i, "<" $i ">"
}
print "---"
}
$ awk -f tst.awk file
Apple,10,12,...
1 <Apple>
2 <10>
3 <12>
4 <...>
---
Banana,5,10,...
1 <Banana>
2 <5>
3 <10>
4 <...>
---
"Banana, green",3,14,...
1 <"Banana, green">
2 <3>
3 <14>
4 <...>
---