Как разобрать CSV файл в Bash?
Я работаю над длинным сценарием Bash. Я хочу читать ячейки из CSV-файла в переменные Bash. Я могу разобрать строки и первый столбец, но не любой другой столбец. Вот мой код до сих пор:
cat myfile.csv|while read line
do
read -d, col1 col2 < <(echo $line)
echo "I got:$col1|$col2"
done
это только печать первого столбца. В качестве дополнительного теста я попробовал следующее:
read -d, x y < <(echo a,b,)
и $y пуст. Поэтому я попробовал:
read x y < <(echo a b)
и $y составляет b. Зачем?
2 ответов:
вы должны использовать
IFSвместо-d:while IFS=, read -r col1 col2 do echo "I got:$col1|$col2" done < myfile.csvобратите внимание, что для общего анализа CSV вы должны использовать специализированный инструмент, который может обрабатывать поля с кавычками с внутренними запятыми, среди других проблем, которые Bash не может обрабатывать сам по себе. Примерами таких инструментов являются
cvstoolиcsvkit.
С
manстраницы:-д делим Первый символ delim используется для завершения входной строки, вместо новой строки.
вы используете
-d,который завершит входную строку на запятую. Он не будет читать остальную часть строки. Вот почему $y пуст.
Comments