【发布时间】:2012-02-14 22:56:43
【问题描述】:
我正在创建一个 bash 脚本来从 CSV 文件生成一些输出(我有超过 1000 个条目,不喜欢手动执行...)。
CSV 文件的内容类似于:
Australian Capital Territory,AU-ACT,20034,AU,Australia
Piaui,BR-PI,20100,BR,Brazil
"Adygeya, Republic",RU-AD,21250,RU,Russian Federation
我有一些代码可以使用逗号作为分隔符来分隔字段,但有些值实际上包含逗号,例如Adygeya, Republic。这些值用引号括起来,表示其中的字符应被视为字段的一部分,但我不知道如何解析它以考虑到这一点。
目前我有这个循环:
while IFS=, read province provinceCode criteriaId countryCode country
do
echo "[$province] [$provinceCode] [$criteriaId] [$countryCode] [$country]"
done < $input
它为上面给出的样本数据产生这个输出:
[Australian Capital Territory] [AU-ACT] [20034] [AU] [Australia]
[Piaui] [BR-PI] [20100] [BR] [Brazil]
["Adygeya] [ Republic"] [RU-AD] [21250] [RU,Russian Federation]
如您所见,第三个条目解析不正确。我希望它输出
[Adygeya Republic] [RU-AD] [21250] [RU] [Russian Federation]
【问题讨论】:
-
谢谢@TomWhittock,我会调查那个答案给出的链接,我以前从未使用过
awk,所以可能需要对它进行检查(为了其他人的利益,链接是:backreference.org/2010/04/17/csv-parsing-with-awk) -
您不能用“|”、制表符或其他一些未出现在输入中的字符重新导出数据吗?祝你好运。
-
@shellter 不幸的是,我无法控制数据的导出
-
还可以在 google 群组中搜索 comp.lang.awk。 10 年前有 3 个月的关于处理 CSV 的讨论。一些非常复杂的解决方案。祝你好运。