【问题标题】:Add filename to appended text file in shell script above pasted text将文件名添加到粘贴文本上方的 shell 脚本中的附加文本文件
【发布时间】:2015-07-14 10:05:31
【问题描述】:

处理脚本(Mac OSX Yosemite,在终端中工作),我在其中分析大量文件并将脚本的输出添加到一个文本文件中。

gawk -f ./user/filter.dat ./user/outputpre1.out >> ./user/outputpost.out
gawk -f ./user/filter.dat ./user/outputpre2.out >> ./user/outputpost.out

对于解释,查找输出的来源非常有用。我现在的输出都是行,像这样:

ROW1:OUTPUTOUTPUT
ROW2:OUTPUTOUTPUT
ROW8:OUTPUTOUTPUT
ROW10:OUTPUTOUTPUT

我想要什么:

**Output from file outputpre1.out
ROW1:OUTPUTOUTPUT
ROW2:OUTPUTOUTPUT

**Output from file outputpre2.out
ROW8:OUTPUTOUTPUT
ROW10:OUTPUTOUTPUT

可以通过 gawk 实现吗?

【问题讨论】:

    标签: macos bash shell terminal gawk


    【解决方案1】:

    您没有显示filter.dat 脚本,但gawk 知道当前输入文件的名称,可以将其合并到您的脚本逻辑中(参见manual):

    文件名

    当前输入文件的名称。如果命令行中没有指定文件,FILENAME 的值为“-”。 但是,FILENAMEBEGIN 块内未定义 (除非由 getline 设置)。

    如何合并取决于filter.dat 的组织方式。该脚本必须设置一个变量(将在重复使用时进行测试)以确保它只打印一次文件名。像这样的片段:

    BEGIN {
        first = 1
    }
    ... (just before printing rows)
    if (first == 1) {
        printf "\n**Output from file %s\n", FILENAME;
        first = 0;
    }
    

    【讨论】:

    • 感谢您的回答。 filter.dat 很容易组织。 { if ($21 > 0.005) { } else { print $0 } }
    • 现在我设法添加文件名,方法是在“print $0”命令之后添加它。我只是不确定将其余代码放在此 filter.dat 文件中的哪个位置。
    猜你喜欢
    • 2011-07-31
    • 2018-05-05
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多