我正在研究一个很长的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。为什么?
b
您需要使用IFS而不是-d:
IFS
-d
while IFS=, read -r col1 col2 do echo "I got:$col1|$col2" done < myfile.csv
请注意,对于一般用途的CSV解析,您应该使用专门的工具,该工具可以处理带有内部逗号的带引号的字段,以及Bash无法自行处理的其他问题。此类工具的示例为cvstool和csvkit。
cvstool
csvkit