我想复制五个文件的内容到一个文件。我试着对每个文件使用cp。但是这会覆盖从上一个文件复制的内容。我也试过
paste -d "\n" 1.txt 0.txt
但这并没有奏效。
我希望我的脚本在每个文本文件的末尾添加换行符。
如。文件1.txt, 2.txt, 3.txt。把1,2,3的内容放在0.txt中
我该怎么做?
我想复制五个文件的内容到一个文件。我试着对每个文件使用cp。但是这会覆盖从上一个文件复制的内容。我也试过
paste -d "\n" 1.txt 0.txt
但这并没有奏效。
我希望我的脚本在每个文本文件的末尾添加换行符。
如。文件1.txt, 2.txt, 3.txt。把1,2,3的内容放在0.txt中
我该怎么做?
当前回答
发送多个文件到一个文件(text .txt):
cat *.txt > textall.txt
其他回答
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
我找到这个页面是因为我需要将952个文件合并为一个。我发现如果你有很多文件,这个工作得更好。这将为您需要的任意数量的数字进行循环,并使用>>将每个数字附加到0.txt的末尾。
编辑:
正如评论中提到的:
cat {1..3}.txt >> 0.txt
or
cat {0..3}.txt >> all.txt
所有的(文本)文件到一个
find . | xargs cat > outfile
Xargs生成find的输出行。猫的论点。
Find有很多选项,比如name '*.txt'或type。
如果您想在管道中使用它,您应该查看它们
您需要cat (concatenate的缩写)命令,并将shell重定向(>)导入到输出文件
cat 1.txt 2.txt 3.txt > 0.txt
另一个选择,对于那些像我一样偶然发现这篇文章的人来说,是使用find -exec:
find . -type f -name '*.txt' -exec cat {} + >> output.file
在我的例子中,我需要一个更健壮的选项,可以查看多个子目录,所以我选择使用find。分解一下:
find .
查看当前工作目录。
-type f
只对文件感兴趣,而不是目录等。
-name '*.txt'
按名称缩减结果集
-exec cat {} +
对每个结果执行cat命令。"+"表示只生成一个cat实例(thx @gniourf_gniourf)
>> output.file
正如在其他答案中解释的那样,将cat-ed内容附加到输出文件的末尾。
另一个选项是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