열이 쉼표로 구분된 대용량 CSV 파일이 있습니다. 그러나 약 5%의 경우 첫 번째 열 자체에 쉼표가 포함되어 있으며, 이는 해당 필드 안에 쉼표가 있으면 해당 필드 주위에 따옴표가 있다는 사실로 알 수 있습니다.
따옴표 안에 쉼표가 있을 때 쉼표가 구분 기호로 표시되지 않도록 이 파일을 읽는 좋은 방법은 무엇입니까?
내가 생각할 수 있는 가장 좋은 방법은 스택으로 복잡한 작업을 수행하거나 현재 따옴표 안에 있는지 확인하는 것이지만 더 쉬운 방법이 있어야 한다고 생각합니다. 참고: 인용문 안에 인용문이 있을 수 없으며, 이를 넘어서는 다른 특수한 경우도 없습니다.
*예:
- 애플, 10, 12,...
- 바나나, 5, 10,...
- "Banana, green", 3, 14, ...(이 줄에는 쉼표가 있지만 이를 나타내는 따옴표가 있습니다.)*
바나나와 녹색을 별도의 변수로 읽는 기본 동작 대신 마지막 줄을 변수 "바나나, 녹색"으로 읽고 싶습니다.
답변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 <...>
---