如何parsingBash中的CSV文件?

我正在做一个长的Bash脚本。 我想从CSV文件中读取单元格到Bashvariables。 我可以parsing行和第一列,但没有任何其他列。 这是我的代码到目前为止:

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

这只是打印第一列。 作为一个额外的testing,我尝试了以下内容:

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

$ y是空的。 所以我试了一下:

read xy < <(echo ab)

而$ y是b 。 为什么?

您需要使用IFS而不是-d

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

请注意,对于一般用途的CSVparsing,您应该使用一个专门的工具,它可以处理与内部逗号引用字段,以及其他问题,Bash本身无法处理。 这样的工具的例子是cvstoolcsvkit

man页:

-d delim delim的第一个字符用于终止input行,而不是换行符。

您正在使用-d,这将在逗号上终止input行。 它不会读取其余的行。 这就是为什么$ y是空的。