如何在bash脚本中用逗号分割列表

时间:2016-05-19 12:30:59

标签: linux bash csv split

我试图读取csv文件并用逗号分隔数据。

我用过

IFS=, list=($line)
for word in ${list[@]}; do
  echo $word
done

根据逗号分割csv记录,效果很好。

问题是我在csv中有一个带引号的字符串,其中包含一个逗号

Name, "Oct 2, 2015 at 1:06 PM", Superman

在这种情况下,它会返回

Name
"Oct 2
 2015 at 1:06 PM"
Superman

我想要

Name
"Oct 2, 2015 at 1:06 PM"
Superman

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在纯粹的bash中执行此操作并不是一个好方法,并且您无法使用cut来执行此操作,而且也不会尊重引号。

但是,有很好的命令行实用程序。例如,Fedora有一个csv包,提供csv命令,它与cut做同样的事情,但尊重引号:

[james@marlon ~] $ echo '1,"3,w",4' | csv --col 2
"3,w"

它还提供了一个包ocaml-csv,它为csvtool提供了类似的功能:

[james@marlon ~] $ echo '1,"3,w",4' | csvtool col 2 -
"3,w"

这些很可能也可以在其他发行版上使用。