我试图水平连接1000个由单个列组成的文件,每个文件包含一个文件。由于所有有要连接的命名文件:myfile1.txt
,myfile2.txt
,myfile3.txt
,......,我用下面的字符串:Cat命令无法水平连接文件
cat $myfile*.txt > myoutput.txt
不幸的是,该文件是垂直串联。
任何人都可以帮助我吗?
我试图水平连接1000个由单个列组成的文件,每个文件包含一个文件。由于所有有要连接的命名文件:myfile1.txt
,myfile2.txt
,myfile3.txt
,......,我用下面的字符串:Cat命令无法水平连接文件
cat $myfile*.txt > myoutput.txt
不幸的是,该文件是垂直串联。
任何人都可以帮助我吗?
cat
命令应该垂直连接文件;否则它会被打破。 (可以用一个非标准选项编写cat
的变体来指示它改变它的行为并进行横向连接,但为什么要麻烦?)。
设计成粘贴(串连)的命令文件水平是paste
:
paste myfile*.txt
默认情况下,从每一个文件将被制表符分隔的线;您可以使用命令行选项来控制paste
的行为和其他各个方面。
如果您有一千个文件,并且每个文件中的每行都包含10个字符,那么您的输出文件将具有10 KiB或更长的行。请注意,POSIX并没有要求公用事业(命令)支持这么长的路线,尽管是最好的意愿。 (LINE_MAX
的最小值是2048.)GNU确实需要支持无限长的行,但是您应该仔细检查用于处理paste命令输出的任何内容。
实际上,对于1000个文件,您可能不必担心每个进程的文件描述符限制。使用ulimit -n
(或ulimit -a
)查找单个进程可打开的文件数限制。如果它是256,则可能需要增加它。您将最终调查“硬限制”和“软限制”(ulimit -H -a
和ulimit -S -a
)。
(请注意,cat $myfile*.txt
给出了cat myfile*.txt
的文件不同的列表,除非变量赋值myfile=myfile
首次完成的。)
>>是指垂直串联,你应该与其他命令尝试(我不是真的肯定如何在shell中做到这一点,我会用其他编程语言编写脚本) 猫不会做任何串联,它只是输出文件。 – Antzi 2015-01-15 16:06:24
标题不公平,'猫'是为了连续地连接文件的内容,你想要的是交错内容。这不是'猫'承诺要做的。 – 2015-01-15 16:11:17
使用'paste1 file2 file3 ...' – fedorqui 2015-01-15 16:11:39