Как разобрать 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. Зачем?

740   2  

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

    Ничего не найдено.