如何将多个文件的内容附加到一个文件中

时间:2013-08-01 23:54:08

标签: linux bash unix

我想将五个文件的内容原样复制到一个文件中。我尝试使用cp为每个文件。但是它会覆盖从前一个文件复制的内容。我也试过

paste -d "\n" 1.txt 0.txt

它不起作用。

我希望我的脚本在每个文本文件的末尾添加换行符。

例如。文件1.txt,2.txt,3.txt。将1,2,3的内容放在0.txt

我该怎么做?

11 个答案:

答案 0 :(得分:270)

你需要cat(连接的简称)命令,shell重定向(>)到你的输出文件中

cat 1.txt 2.txt 3.txt > 0.txt

答案 1 :(得分:86)

对于那些仍然像我一样偶然发现这篇文章的人来说,另一种选择是使用find -exec

find . -type f -name '*.txt' -exec cat {} + >> output.file

就我而言,我需要一个更健壮的选项来查看多个子目录,因此我选择使用find。打破它:

find .

查看当前的工作目录。

-type f

只对文件感兴趣,而不是目录等。

-name '*.txt'

按名称缩小结果集

-exec cat {} +

对每个结果执行cat命令。 “+”表示只生成cat的1个实例(thx @gniourf_gniourf)

 >> output.file

如其他答案中所述,将cat-ed内容附加到输出文件的末尾。

答案 2 :(得分:37)

如果你有某种输出类型,那就做这样的事情

cat /path/to/files/*.txt >> finalout.txt

答案 3 :(得分:15)

如果您的所有文件都在单个目录中,则只需执行

即可

cat * > 0.txt

文件1.txt,2.txt,..将进入0.txt

答案 4 :(得分:9)

for i in {1..3}; do cat "$i.txt" >> 0.txt; done

我找到了这个页面,因为我需要将952个文件合并为一个。如果你有很多文件,我发现这可以更好地工作。这将为您需要的许多数字做一个循环,并使用>>附加到0.txt。

的末尾

答案 5 :(得分:6)

如果您的所有文件的名称相同,您可以这样做:

cat *.log >> output.log

答案 6 :(得分:4)

另一个选项是sed

sed r 1.txt 2.txt 3.txt > merge.txt 

或......

sed h 1.txt 2.txt 3.txt > merge.txt 

或者...

sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here

或者没有重定向......

sed wmerge.txt 1.txt 2.txt 3.txt

请注意,最后一行也写merge.txt(不是wmerge.txt!)。您可以使用w"merge.txt"来避免与文件名混淆,并使用-n进行静默输出。

当然,您也可以使用通配符缩短文件列表。例如,如上例中的编号文件,您可以用这种方式指定带括号的范围:

sed -n w"merge.txt" {1..3}.txt

答案 7 :(得分:2)

如果原始文件包含不可打印的字符,则在使用cat命令时它们将丢失。使用'cat -v',非printables将转换为可见字符串,但输出文件仍然不包含原始文件中的实际非printables字符。对于少量文件,替代方法可能是在处理非打印字符的编辑器(例如vim)中打开第一个文件。然后操纵到文件的底部并输入“:r second_file_name”。这将拉入第二个文件,包括非打印字符。对于其他文件也可以这样做。读入所有文件后,输入“:w”。最终结果是第一个文件现在将包含它最初的内容,以及读入的文件的内容。

答案 8 :(得分:2)

如果您的文件包含标题,并且您希望在输出文件中删除它们,则可以使用:

for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done

答案 9 :(得分:1)

如果要将3个文件的内容附加到一个文件中,则以下命令将是一个不错的选择:

cat file1 file2 file3 | tee -a file4 > /dev/null

它会将所有文件的内容合并到file4中,将控制台输出投放到/dev/null

答案 10 :(得分:1)

将所有(文本)文件合并为一个

find . | xargs cat > outfile

xargs使find的输出行。猫的争论。

查找有很多选项,例如-name'* .txt'或-type。

如果要在管道中使用它,应该将其检出