Excel保存制表符分隔文件而不换行(UNIX/Mac OS X)

IMP*_*TOR 17 unix macos excel perl newline

这是我遇到的一个常见问题,我的解决方案有点夸张.所以我正在寻找快速解决问题的方法.

问题是,当我决定将excel(mac 2011)中的电子表格保存为制表符分隔文件时,它似乎完全没问题.直到我尝试使用Perl逐行解析文件.出于某种原因,它将整个文档扼杀在一行中.

我的野蛮解决方案是在Web浏览器中打开文件,并将信息复制并粘贴到TextEdit中的制表符分隔文件中(我从不使用富文本格式).我尝试在执行此修复之前在文件末尾引入换行符,但它无法解决问题.

这里发生了什么?一个解释将不胜感激.

〜谢谢!〜

小智 11

问题是在不同系统上定义新行的实际字符代码.Windows系统通常使用CarriageReturn + LineFeed(CRLF),*NIX系统仅使用LineFeed(LF).

这些字符可以在RegEx中表示为\ r \n\n(分别).

有时,要通过文本文件进行哈希处理,您需要解析新行字符.在perl中尝试使用DOS-to-UNIX :

perl -pi -e 's/\r\n/\n/g' input.file
Run Code Online (Sandbox Code Playgroud)

或者,对于使用sed的 UNIX-to-DOS :

$ sed 's/$'"/`echo \\\r`/" input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

或者,对于使用sed的 DOS到UNIX :

$ sed 's/^M$//' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

  • Excel 2011上的mac是保存文本文件(即tsv),只使用回车来分隔行`\ r`.这曾经是Mac OS 9的标准配置,但是从OS X开始,标准惯例是使用Unix换行符`\n`.也许微软将来会符合这个标准吗?人们可以梦想...... (4认同)
  • @AndrewJesaitis是对的 - 这里的具体问题是Excel使用`\ r`行结尾保存.csv文件,这在OS X上不是正确的约定.因此,要纠正@epluribusunix的答案,正确的Perl - 衬里将是:`perl -pi -e'/\r/\n/g'input.file` (2认同)

小智 7

找到了一个非常简单的解决方案.将数据从Excel复制到剪贴板,将其粘贴到Google电子表格中.将谷歌电子表格文件下载为"制表符分隔值.tsv".这解决了问题,并且每个行都有一个带有行尾的制表符分隔符.

  • 不是解决方案,而是解决方法。 (2认同)