Cat 命令无法水平连接文件
Cat command fails to concatenate files horizontally
我正在尝试将大约 1000 个文件(每个文件由一列组成)水平连接到一个文件中。由于所有必须连接的文件都命名为:myfile1.txt
、myfile2.txt
、myfile3.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 -a
和 ulimit -S -a
)。
(请注意,cat $myfile*.txt
给出了与 cat myfile*.txt
不同的文件列表,除非首先完成了变量赋值 myfile=myfile
。)
我正在尝试将大约 1000 个文件(每个文件由一列组成)水平连接到一个文件中。由于所有必须连接的文件都命名为:myfile1.txt
、myfile2.txt
、myfile3.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 -a
和 ulimit -S -a
)。
(请注意,cat $myfile*.txt
给出了与 cat myfile*.txt
不同的文件列表,除非首先完成了变量赋值 myfile=myfile
。)