[英]How to get contents from 2 files and append that contents to a new file using a shell script
[英]How to append contents of multiple files into one file
我想按原样将五个文件的内容复制到一个文件中。 我尝试对每个文件使用 cp 来做到这一点。 但这会覆盖从前一个文件复制的内容。 我也试过
paste -d "\n" 1.txt 0.txt
它没有用。
我希望我的脚本在每个文本文件的末尾添加换行符。
例如。 文件 1.txt、2.txt、3.txt。 将 1,2,3 的内容放入 0.txt
我该怎么做 ?
您需要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 命令。 “+”表示只生成了 1 个cat
实例(感谢 @gniourf_gniourf)
>> output.file
如其他答案中所述,将 cat-ed 内容附加到输出文件的末尾。
如果你有某种输出类型,那么做这样的事情
cat /path/to/files/*.txt >> finalout.txt
如果你的所有文件都在一个目录中,你可以简单地做
cat * > 0.txt
文件 1.txt,2.txt, .. 将进入 0.txt
如果您的所有文件都以类似方式命名,您可以简单地执行以下操作:
cat *.log >> output.log
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
我找到这个页面是因为我需要将 952 个文件合并为一个。 如果你有很多文件,我发现这会更好地工作。 这将对您需要的任何数字进行循环,并使用 >> 将每个数字添加到 0.txt 的末尾。
编辑:
正如评论中提到的:
cat {1..3}.txt >> 0.txt
要么
cat {0..3}.txt >> all.txt
另一种选择是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
如果您的文件包含标题并且您想在输出文件中删除它们,您可以使用:
for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
如果原始文件包含不可打印字符,使用 cat 命令时会丢失。 使用'cat -v',不可打印字符将被转换为可见字符串,但输出文件仍不会包含原始文件中实际的不可打印字符。 对于少量文件,替代方法可能是在处理非打印字符的编辑器(例如 vim)中打开第一个文件。 然后移动到文件底部并输入“:r second_file_name”。 这将拉入第二个文件,包括非打印字符。 对其他文件也可以这样做。 读入所有文件后,输入“:w”。 最终结果是第一个文件现在将包含它最初所做的,以及读入的文件的内容。
所有(文本)文件合二为一
find . | xargs cat > outfile
xargs 使 find 的输出行。 猫的论点。
find 有很多选项,比如 -name '*.txt' 或 -type。
如果你想在你的管道中使用它,你应该检查它们
如果要将 3 个文件的内容附加到一个文件中,那么以下命令将是一个不错的选择:
cat file1 file2 file3 | tee -a file4 > /dev/null
它将所有文件的内容合并到 file4 中,将控制台输出抛出到/dev/null
。
将多个文件发送到一个文件( textall.txt )
cat *.txt > textall.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.