我想将五个文件的内容原样复制到一个文件中.我尝试使用cp为每个文件.但是它会覆盖从前一个文件复制的内容.我也试过了
paste -d "\n" 1.txt 0.txt
Run Code Online (Sandbox Code Playgroud)
它不起作用.
我希望我的脚本在每个文本文件的末尾添加换行符.
例如.文件1.txt,2.txt,3.txt.将1,2,3的内容放在0.txt中
我该怎么做 ?
rad*_*al7 282
你需要cat
(连接的简称)命令,shell重定向(>
)到输出文件中
cat 1.txt 2.txt 3.txt > 0.txt
Run Code Online (Sandbox Code Playgroud)
mop*_*922 91
对于那些仍然像我一样偶然发现这篇文章的人来说,另一种选择是使用find -exec
:
find . -type f -name '*.txt' -exec cat {} + >> output.file
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我需要一个更健壮的选项,可以查看多个子目录,所以我选择使用find
.打破它:
find .
Run Code Online (Sandbox Code Playgroud)
查看当前工作目录.
-type f
Run Code Online (Sandbox Code Playgroud)
只对文件感兴趣,而不是目录等.
-name '*.txt'
Run Code Online (Sandbox Code Playgroud)
按名称减少结果集
-exec cat {} +
Run Code Online (Sandbox Code Playgroud)
对每个结果执行cat命令."+"表示只cat
生成了一个实例(thx @gniourf_gniourf)
>> output.file
Run Code Online (Sandbox Code Playgroud)
如其他答案中所述,将cat-ed内容附加到输出文件的末尾.
Esw*_*nti 40
如果你有某种输出类型,那么做这样的事情
cat /path/to/files/*.txt >> finalout.txt
Run Code Online (Sandbox Code Playgroud)
小智 9
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
Run Code Online (Sandbox Code Playgroud)
我找到了这个页面,因为我需要将952个文件合并为一个.如果你有很多文件,我发现这可以更好地工作.这将为你需要的许多数字做一个循环,并使用>>将每个数字添加到0.txt的末尾.
另一种选择是sed
:
sed r 1.txt 2.txt 3.txt > merge.txt
Run Code Online (Sandbox Code Playgroud)
或者...
sed h 1.txt 2.txt 3.txt > merge.txt
Run Code Online (Sandbox Code Playgroud)
或者...
sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here
Run Code Online (Sandbox Code Playgroud)
或者没有重定向...
sed wmerge.txt 1.txt 2.txt 3.txt
Run Code Online (Sandbox Code Playgroud)
请注意,最后一行也写merge.txt
(不是wmerge.txt
!)。您可以使用w"merge.txt"
避免与文件名混淆,并-n
用于静默输出。
当然,您也可以使用通配符来缩短文件列表。例如,对于上面示例中的编号文件,您可以通过这种方式使用大括号指定范围:
sed -n w"merge.txt" {1..3}.txt
Run Code Online (Sandbox Code Playgroud)
如果您的文件包含标题并且您想在输出文件中删除它们,您可以使用:
for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
Run Code Online (Sandbox Code Playgroud)