如何将多个文件的内容附加到一个文件中
我想将五个文件的内容按原样复制到一个文件中。 我试图使用cp为每个文件。 但是,这会覆盖从前一个文件复制的内容。 我也试过了
paste -d "\n" 1.txt 0.txt
并没有工作。
我想我的脚本在每个文本文件的末尾添加换行符。
例如。 文件1.txt,2.txt,3.txt。 把内容1,2,3放在0.txt中
我该怎么做 ?
你需要cat
(concatenate的简写)命令,把shellredirect( >
)到你的输出文件中
cat 1.txt 2.txt 3.txt > 0.txt
另一个select,对于那些仍然偶然发现这个post的人,就是使用find -exec
:
find . -type f -name '*.txt' -exec cat {} + >> output.file
在我的情况下,我需要一个更强大的选项,通过多个子目录,所以我select使用find
。 打破它:
find .
查看当前的工作目录。
-type f
只对文件感兴趣,而不是目录等
-name '*.txt'
减less按名称排列的结果
-exec cat {} +
对每个结果执行cat命令。 “+”意味着只生成1个cat
实例(thx @gniourf_gniourf)
>> output.file
正如在其他答案中所解释的那样,将追加的内容追加到输出文件的末尾。
如果你有一个特定的输出types,然后做这样的事情
cat /path/to/files/*.txt >> finalout.txt
如果你所有的文件都在单个目录中,你可以简单地做
cat * > 0.txt
文件1.txt,2.txt,..将进入0.txt
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
我find了这个页面,因为我需要将952个文件合并成一个文件。 如果你有很多文件,我发现这个工作要好得多。 这将为你所需要的许多数字做一个循环,并且使用>>将每个数字追加到0.txt的末尾。
另一个选项是sed
:
sed r 1.txt 2.txt 3.txt > merge.txt
要么…
sed h 1.txt 2.txt 3.txt > merge.txt
要么…
sed -np 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here
或者没有redirect
sed wmerge.txt 1.txt 2.txt 3.txt
请注意,最后一行也写入merge.txt
(而不是wmerge.txt
!)。 您可以使用w"merge.txt"
以避免与文件名混淆,对于无提示输出可以使用-n
。
当然,你也可以用通配符缩短文件列表。 例如,如果像上面的例子那样编号的文件,你可以用这种方式来指定带花括号的范围:
sed -nw"merge.txt" {1..3}.txt
如果原始文件包含不可打印的字符,则在使用cat命令时会丢失。 使用“cat -v”,非printables将被转换为可见的string,但输出文件仍然不包含原始文件中的实际非printables字符。 对于less量文件,另一种方法是在处理非打印字符的编辑器(例如vim)中打开第一个文件。 然后操作到文件底部并input“:r second_file_name”。 这将拉第二个文件,包括非打印字符。 对于其他文件也可以做同样的事情。 当所有文件都被读入时,input“:w”。 最终的结果是,第一个文件现在将包含它原来的内容,以及读入文件的内容。
如果您的文件包含标题,并且希望在输出文件中将其删除,则可以使用:
for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
如果所有文件的命名都是相似的,你可以简单地做:
cat *.log >> output.log
如果要将3个文件的内容附加到一个文件中,那么以下命令将是一个不错的select:
cat file1 file2 file3 | tee -a file4 > /dev/null
它会将所有文件的内容合并到file4中,并将控制台输出到/dev/null
。