【问题标题】:Sed doesn't read CSV when saved in Excel保存在 Excel 中时 Sed 不读取 CSV
【发布时间】:2012-08-20 02:46:21
【问题描述】:

我正在尝试编写一个 bash 脚本来导入 CSV 文件并将其发送到网络上的某个地方。如果我使用手写的 CSV,即:

summary,description
CommaTicket1,"Description, with a comma"
QuoteTicket2,"Description ""with quotes"""
CommaAndQuoteTicke3,"Description, with a commas, ""and quotes"""
DoubleCommaTicket4,"Description, with, another comma"
DoubleQuoteTicket5,"Description ""with"" double ""quoty quotes"""

READ 命令能够很好地读取文件。但是,如果我在 Excel 中创建“相同的文件”(即:具有相同的字段),则 READ 无法正常工作,通常只读取第一个值,仅此而已。

Bash 脚本相对较新,所以如果有人认为我的代码有问题,我会上传它,但似乎是 Excel for Mac 保存文件的方式有问题,我想有人可能会有一些想法关于那个。

你们能贡献的任何东西都将不胜感激。干杯!

【问题讨论】:

  • 如果您从所有字段中排除逗号和引号,它将如何工作?
  • 同样的事情。它与引号或逗号无关,而是使用的回车符类型(参见接受的答案)。
  • 谢谢我已经知道了。 :)

标签: excel bash csv


【解决方案1】:

默认情况下,Mac 上的 Excel 使用回车符指示新记录,但 bash 使用换行符查找记录。在 Excel for Mac 中保存文件时,请务必将字符编码(保存文件时可用的选项)更改为 DOS 或 Windows 等,其中应弹出回车符和换行符,并且应是“可读的”。

或者,您可以只使用 tr 处理文件,并将所有 CR 转换为 LF,即,

tr '\r' '\n' < myfile.csv > newfile.csv

验证这是否确实是问题的一种方法是使用od 检查文件。使用类似的东西:

od -c myfile.csv

并寻找行尾字符。

最后,您还可以调查 bash 的内部 IFS 变量,并将其设置为在其中包含“\r”。见:http://tldp.org/LDP/abs/html/internalvariables.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多