Cómo analizar un archivo CSV en Bash?

Estoy trabajando en un largo script Bash. Quiero leer celdas de un archivo CSV en variables Bash. Puedo analizar líneas y la primera columna, pero no cualquier otra columna. Aquí está mi código hasta ahora:

cat myfile.csv|while read line do read -d, col1 col2 < <(echo $line) echo "I got:$col1|$col2" done 

Solo está imprimiendo la primera columna. Como prueba adicional, intenté lo siguiente:

read -d, xy < <(echo a,b,)

Y $ y está vacío. Así que lo intenté:

read xy < <(echo ab)

Y $ y es b . ¿Por qué?

Necesita usar IFS lugar de -d :

 while IFS=, read -r col1 col2 do echo "I got:$col1|$col2" done < myfile.csv 

Tenga en cuenta que, para el análisis de CSV de uso general, debe utilizar una herramienta especializada que pueda manejar los campos entrecomillados con comas internas, entre otros problemas que Bash no puede manejar por sí mismo. Ejemplos de tales herramientas son cvstool y csvkit .

Desde la página man :

-d delim El primer carácter de delim se usa para terminar la línea de entrada, en lugar de la línea nueva.

Está utilizando -d, que terminará la línea de entrada en la coma. No leerá el rest de la línea. Es por eso que $ y está vacío.