Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash脚本中用逗号拆分列表_Linux_Bash_Csv_Split - Fatal编程技术网

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

Linux 如何在bash脚本中用逗号拆分列表,linux,bash,csv,split,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 a

我试图读取一个
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

如何解决这个问题?

在纯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"

其他发行版也很可能提供这些工具。

相反,请使用Python中适当的解析器Perl…
apt get install csvtool