Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何在文件I';m与“连接”;猫;?_Unix - Fatal编程技术网

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或任何其他子流程。嗯,不,这根本不起作用。粘贴的功能与问题类似,但与问题不同。它将文件交错。