Cygwin下水平合并csv文件的问题

Cygwin下水平合并csv文件的问题

我有两个 csv 文件:

test1.csv
1
2
3
4

test2.csv
6
7
8
9

我想水平合并这两个文件。为此,我使用“paste -d , test1.csv test2.csv > paste.csv 如果我在记事本中打开此文件,它看起来是正确的”,即

paste.csv
1,6
2,7
3,8
4,9

但是,如果我在 Excel 中加载paste.csv,它看起来像

在此输入图像描述

我缺少什么?提前致谢!

PS 这可能并不重要,但我在 Windows 上并使用 Cygwin。

更新:当我在记事本中打开paste.csv时,我注意到一些奇怪的事情。数字和逗号之间似乎有一个看不见的字符。例如,如果我将光标放在 1 和 之间,然后按退格键,则不会发生任何情况。当我再次按退格键时,1 按预期被删除。如果我删除所有这些不可见的字符,然后在Excel中加载paste.csv,它是正确的!

答案1

Unix代表换行符带有字符 LF(换行 = \n= ^J= 十进制 10 = 八进制 012 = 十六进制 0x0a)。 Windows 用两个字符序列 CR、LF 表示换行符(CR = 回车符 = \r= ^M= 十进制 13 = 八进制 015 = 十六进制 0x0d)。当 Windows 文本文件由 Unix 实用程序处理时,每一行都会以虚假的 CR 字符结尾。

Cygwin 实用程序是 Linux 工具的直接移植。它们不专门处理 Windows 文本文件,因此 CR 字符最终会作为行内容。在您粘贴的文件中,每个逗号之前都有一个 CR。

您可以先将文件转换为 Unix 格式:

dos2unix *.csv
paste -d , test1.csv test2.csv > paste.csv

或者您可以只删除 CR 字符。在这里,它可以将它们从行内删除;其他一些文本操作需要在处理之前删除它们。

paste -d , test1.csv test2.csv | tr -d '\r' > paste.csv

相关内容