为什么paste(Unix)会自动添加换行符?

时间:2018-01-23 05:46:03

标签: unix

我有两个文件(我将file1 / 2.csv重命名为file1 / 2.txt):

file1     file2
-----     ------
a         1
b         2
...

当我使用paste -d "," file1.txt file2.txt > file3.txt时。 file3.txt的内容是:

a
,1
b
,2

我想知道为什么它没有生成如下内容:

a,1
b,2

1 个答案:

答案 0 :(得分:2)

原因是file1\r\n行结尾,您可以在xxd转储中看到:

312030203020302030203020302030200d0a312031203120312030203020...
                                ^^^^
                                here

你知道这是一行,因为\r == 13 == 0x0d\n == 10 == 0x0a

所以似乎paste命令在行结束之前不知道\r,所以它让它在file1的每一行的末尾,但当你看在file3的内容中,您使用的程序会将\r解释为行尾。

要解决此问题,您可以将行结尾转换为\n,如下所示:

cat file1 | tr -d '\r' > file1-output

或者如果你有dos2unix程序:

dos2unix file1