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
?