Cat命令无法水平连接文件

时间:2015-01-15 16:03:02

标签: unix

我正在尝试将每个由一列组成的1000个文件水平连接到一个文件。由于所有必须连接的文件都命名为:myfile1.txtmyfile2.txtmyfile3.txt,...,我使用以下字符串:

cat $myfile*.txt > myoutput.txt    

不幸的是,这些文件是垂直连接的。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:4)

cat命令应该垂直连接文件;如果不这样做,它就会被打破。 (可以使用非标准选项编写cat的变体来指示它改变其行为并进行水平连接,但为什么要这么麻烦?)。

用于水平粘贴(连接)文件的命令是paste

paste myfile*.txt

默认情况下,每个文件的行将由制表符分隔;您可以使用命令行选项控制paste的行为以及其他各个方面。

如果您有一千个文件,并且每个文件中的每一行包含10个字符,那么您的输出文件将包含10 KiB或更长的行。请注意,POSIX并不强制实用程序(命令)支持如此长的行,尽管最好。 (LINE_MAX的最小值是2048.)GNU确实需要支持无限长行,但是你应该小心检查用于处理paste命令输出的任何内容都可以工作。

实际上,对于1000个文件,您可能不得不担心每进程文件描述符限制。使用ulimit -n(或ulimit -a)查找单个进程可以打开的文件数限制。如果是256,您可能需要增加它。你最终会调查“硬限制”。和软限制' (ulimit -H -aulimit -S -a)。

(请注意cat $myfile*.txt提供了cat myfile*.txt的不同文件列表,除非先完成变量赋值myfile=myfile。)