
У меня есть большой CSV-файл, в котором столбцы разделены запятыми в каждом случае. Однако примерно в 5% случаев первый столбец содержит запятую внутри себя и обозначается таким образом тем фактом, что эти поля будут иметь кавычки вокруг себя, если внутри них есть запятая.
Как лучше всего читать этот файл, чтобы не рассматривать запятые как разделители, если они содержатся в кавычках?
Лучший способ, который я думаю, это сделать что-то сложное со стеком или чем-то еще, чтобы увидеть, находимся ли мы в настоящее время в кавычках или нет, но я думаю, что наверняка должен быть более простой способ. Примечание: никогда не бывает кавычек внутри кавычек или каких-либо других крайних случаев за пределами этого.
*Примеры:
- Яблоко, 10, 12, ....
- Банан, 5, 10, ...
- «Банан, зеленый», 3, 14, ... (Обратите внимание, что в этой строке есть запятая, но для этого используются кавычки)*
Я бы хотел считать эту последнюю строку переменной как «Банан, зеленый», а не как по умолчанию, когда банан и зеленый считаются отдельными переменными.
решение1
С GNU awk для FPAT:
$ 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 <...>
---