Unix 如何在文件I';m与“连接”;猫;?
我想对目录中的所有文件进行分类,但在每个文件之间都包含一些间隔符。Unix 如何在文件I';m与“连接”;猫;?,unix,Unix,我想对目录中的所有文件进行分类,但在每个文件之间都包含一些间隔符。 echo”“>blank.txt cat f1.txt blank.txt f2.txt blank.txt f3.txt 处理目录中的所有文件(假设类似于ksh的Shell) 以*存档;做 cat$file>>result.txt echo”“>>result.txt 完成 使用awk awk 'FNR==1{print ""}{print}' file* > out.txt 您可能希望看到pr(1),它可以做您想
echo”“>blank.txt
cat f1.txt blank.txt f2.txt blank.txt f3.txt
处理目录中的所有文件(假设类似于ksh的Shell)
以*存档;做
cat$file>>result.txt
echo”“>>result.txt
完成
使用awk
awk 'FNR==1{print ""}{print}' file* > out.txt
您可能希望看到
pr(1)
,它可以做您想做的事情
要启动自己的脚本,请展开此posix shell脚本片段:
ls -1 | while read f; do cat "$f"; echo This is a spacer line; done > /tmp/outputfile
这可能更容易理解为:
ls -1 | while read f; do
cat "$f"
echo This is a spacer line
done > /tmp/outputfile
对于ls
您实际上不需要-1
,请尝试
find . -type f -exec cat {} \; -exec echo "-- spacer --" \;
显然,“间隔符”可以比这里使用的简单示例更简单。我认为最简单的方法是使用
粘贴命令:
paste $(ls *) > file.out
除非手动将目录中的所有文件列为参数,否则这不会处理目录中的所有文件。如果使用for循环扩展所有文件,请小心$文件可能是一个目录,您将访问一个目录。讨厌的递归。但是这是可行的:awk'FNR==1{print”“}{print}*.txt>/tmp/out.txt你说的讨厌的递归是什么意思?如果我单独运行这一行,命令永远不会退出,并不断将文件附加到out.txt(它与我正在cat.out.txt的文件位于同一文件夹中)。out.txt变得非常大,非常快。(同样,OSX 10.5.8 YRMV).file*在我的示例中意味着处理文件名以file开头的文件。因此,如果您有像file1、file2、file3这样的名称,那么它将进行处理。现在唯一的区别是您更改为*.txt。我只能猜测您有许多文件名以file开头??如果不是,我不明白为什么它会进入递归,并且永远不会退出,因为它是适合我。无论如何,既然有一个适合你的解决方案,那就应该可以了。awk'FNR==1{}{print}file*>out.txt
更适合我。谢谢。谢谢!只要记住将输出重定向到另一个目录(就像在awk解决方案中一样)。你根本不需要ls
。只需for f in*;do cat…
()工作正常,但我不能使用“\n”作为我的间隔符,它只使用了一个文本“\n”?只需使用echo”“
作为一个空行。我应该说间隔符可以比示例中的多或少。听起来您的实现与我的不同。echo'
或只是echo
?-printf”\n
“操作”如何也是可行的;我相信它也可以避免调用echo或任何其他子流程。嗯,不,这根本不起作用。粘贴的功能与问题类似,但与问题不同。它将文件交错。