Я знаю, это может звучать так, что есть 2000 ответов на этот вопрос в Интернете, но я не нашел ни одного для этого конкретного случая c (например, -vFPAT
этого и других ответов ), потому что мне нужно быть с split
. Я должен разделить файл CSV с awk, в котором могут быть некоторые значения в двойных кавычках. Мне нужно указать функции split
игнорировать ,
, если она внутри ""
, чтобы получить массив элементов.
Вот что я пробовал на основе других ответов как пример
cat try.txt
Hi,I,"am,your",father
maybe,you,knew,it
but,"I,wanted",to,"be,sure"
cat tst.awk
BEGIN {}
{
n_a = split($0,a,/([^,]*)|("[^"]+")/);
for (i=1; i<=n_a; i++) {
collecter[NR][i]=a[i];
}
}
END {
for (i=1; i<=length(collecter); i++)
{
for (z=1; z<=length(collecter[i]);z++)
{
printf "%s\n", collecter[i][z];
}
}
}
но не повезло:
awk -f tst.awk try.txt
,
,
,
,
,
,
,
,
,
Я попробовал другое выражение регулярного выражения, основанное на другом аналогичном ответе, но ни один из них не подходит для этого конкретного случая.
Обратите внимание: поля в двойных кавычках mat и могут отсутствовать, могут быть более одного и без фиксированной позиции / длины!
Заранее благодарим за любую помощь!