【问题标题】:How do I include a blank line between files I'm concatenating with "cat"?如何在与“cat”连接的文件之间包含一个空行?
【发布时间】:2009-10-31 01:16:24
【问题描述】:

我想对目录中的所有文件进行分类,但在每个文件之间添加一些分隔符。

【问题讨论】:

    标签: unix


    【解决方案1】:

    使用 awk

    awk 'FNR==1{print ""}{print}' file* > out.txt
    

    【讨论】:

    • 讨厌的递归。但这有效: awk 'FNR==1{print ""}{print}' *.txt > /tmp/out.txt
    • 讨厌的递归是什么意思?
    • 如果我单独运行该行,该命令将永远不会退出,并继续将文件附加到 out.txt (与我正在处理的文件位于同一文件夹中。Out.txt 获取非常大,非常快。(同样,OSX 10.5.8 YRMV)。
    • file* 在我的示例中意味着处理文件名以 file 开头的文件。因此,如果您有像 file1、file2、file3 这样的名称,那么它将处理。现在唯一的区别是您更改为 *.txt。我只能猜测您有许多文件名以 file? 开头的文件?如果不是,我不明白为什么它会进入递归并且永远不会退出,因为它对我有用。无论如何,既然有适合你的工作,那么应该没问题。
    • awk 'FNR==1{}{print}' file* > out.txt 对我来说效果更好。谢谢。
    【解决方案2】:

    试试

    find . -type f -exec cat {} \; -exec echo "-- spacer --" \;
    

    显然,'spacer' 可以比这里使用的简单示例更多。

    【讨论】:

    • 有效,但我不能使用 "\n" 作为我的分隔符,它只使用文字 '\n'?
    • 只需使用echo "" 作为空行。我应该说间隔可能比示例更多或更少
    • 听起来你的实现与我的不同。 echo ''echo 怎么样?
    • -printf "\n"“动作”也是可行的;我相信它也可以避免调用 echo 或任何其他子进程。
    【解决方案3】:

    您可能想查看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

    【讨论】:

    • 谢谢!只要记住将输出重定向到另一个目录(如在 awk 解决方案中)。
    • 您根本不需要ls。只需for f in *; do cat ... (porkmail.org/era/unix/award.html#ls)
    【解决方案4】:

    我认为最简单的方法是使用paste 命令:

    paste $(ls *) > file.out
    

    【讨论】:

    • 嗯,不,这行不通。 Paste 做了一些与问题类似但不同的事情。它交织文件。
    【解决方案5】:

    echo "" > blank.txt
    cat f1.txt blank.txt f2.txt blank.txt f3.txt

    处理目录中的所有文件(假设 ksh 像 Shell)

    for file in * ; do
       cat $file >> result.txt
       echo "" >> result.txt
    done

    【讨论】:

    • 除非您手动将它们列为参数,否则不会处理目录中的所有文件。
    • 如果你喜欢用 for 循环扩展所有内容,请小心。 $file 可以是一个目录,你将是一个目录。
    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 2016-05-27
    • 2017-10-03
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多