Cat 命令无法水平连接文件

Cat command fails to concatenate files horizontally

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

cat $myfile*.txt > myoutput.txt    

不幸的是,这些文件是垂直串联的。

有人能帮帮我吗?

cat 命令应该垂直连接文件;如果不这样做,它将被破坏。 (可以使用非标准选项编写 cat 的变体,以指示它改变其行为并进行水平连接,但何必呢?)。

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

paste myfile*.txt

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

如果您有上千个文件,并且每个文件中的每一行包含 10 个字符,那么您的输出文件将包含 10 KiB 或更长的行。请注意,POSIX 并不强制实用程序(命令)支持如此长的行,尽管最好会这样做。 (LINE_MAX 的最小值是 2048。)GNU 确实需要支持无限长的行,但是你应该小心检查你用来处理粘贴命令输出的任何东西是否有效。

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

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