小编典典

如何在Bash中解析CSV文件?

linux

我正在研究一个很长的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。为什么?


阅读 358

收藏
2020-06-02

共1个答案

小编典典

您需要使用IFS而不是-d

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

请注意,对于一般用途的CSV解析,您应该使用专门的工具,该工具可以处理带有内部逗号的带引号的字段,以及Bash无法自行处理的其他问题。此类工具的示例为cvstoolcsvkit

2020-06-02