![如何将字符串值中包含逗号的数据写入 csv 文件](https://linux22.com/image/13342/%E5%A6%82%E4%BD%95%E5%B0%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%80%BC%E4%B8%AD%E5%8C%85%E5%90%AB%E9%80%97%E5%8F%B7%E7%9A%84%E6%95%B0%E6%8D%AE%E5%86%99%E5%85%A5%20csv%20%E6%96%87%E4%BB%B6.png)
我需要使用基本的选择查询访问数据库并将结果输出写入文件中。使用 sqlcmd 我执行查询并将结果写入输出 csv 文件。
尝试以 Excel 形式打开此文件时,中间带有逗号的记录将显示为新列
我该如何克服这个问题?我们可以在 shell 脚本中处理这个问题吗?
答案1
你至少可以引用数据库中的每个字段,无论它是否需要——它仍然是有效的 CSV。不了解 Azure:在 Oracle 中,您使用 CHR(decimal_code) 定义特殊字符,并使用 || 连接分隔符和数据。所以 SQL 中的字段分隔符看起来像这样|| CHR(34) CHR(44) CHR(34) ||
(这就是我过去在 awk 中构建查询的原因)。
令人沮丧的是数据可以包含双引号。您需要在带引号的字段中加倍,因此 : Said "Hello".
: 变成 : "Said ""Hello""."
: 并且这更难做到。
在 awk 中最多可以修复一个可以包含逗号的字段。假设字段 4 是可以包含逗号的字段。您可以截断字段 1-3 和 5-NF,完全引用字段 4,并将该行重新组装为正确的 CSV。如果这有帮助,请评论我。
您还可以在 CSV 字段中包含换行符,这也会弄乱每行的列。这也可以在 awk 中修复。由于换行符仅在带引号的字段中有效,因此具有奇数个引号的任何行都必须位于数据字段的中间,因此您只需预读,直到再次获得偶数个引号。