【问题标题】:AWK-Printing a line as the first record in an output fileAWK-打印一行作为输出文件中的第一条记录
【发布时间】:2013-12-06 00:40:23
【问题描述】:

问题来了:

我有一个 AWK 脚本,它计划通过 crontab 条目每天运行。此特定脚本将错误输出到错误日志。我有一个变量,每次遇到错误时都会递增,并且在我的脚本末尾有以下控制语句:

if (blErrorCounter) {
    print "Log contains " blErrorCounter " errors!"
} else {
    print "Log contains no errors!"
}

该脚本包含许多其他将数据输出到日志文件的错误处理条件,但我希望能够将上述内容作为文件中的第一条记录打印...

这可能很简单,因为我是 AWK 的菜鸟,但任何帮助/指针都会受到极大的欢迎。

肖

【问题讨论】:

  • 您在awk 脚本中有多个print() 语句,这段代码是最后一部分,但它的print() 输出应该出现在第一个,是这样的吗?

标签: printing awk


【解决方案1】:

您需要将错误信息保存在END部分打印,例如:

/error/ { errors[++blErrorCounter] = "Got error at line " FNR }
END {
    if (blErrorCounter) {
        print "Log contains", blErrorCounter, "errors!"
        for (ec=1; ec <= blErrorCounter; ec++) {
            print errors[ec]
        }
    } else {
        print "Log contains no errors!"
    }
}

你也可以写得简单一点:

/error/ { errors[++blErrorCounter] = "Got error at line " FNR }
END {
    print "Log contains", (blErrorCounter ? blErrorCounter : "no"), "errors!"
    for (ec=1; ec <= blErrorCounter; ec++) {
        print errors[ec]
    }
}

或者甚至只是用“0”而不是“no”这个词来生活:

/error/ { errors[++blErrorCounter] = "Got error at line " FNR }
END {
    printf "Log contains %d errors!\n", blErrorCounter
    for (ec=1; ec <= blErrorCounter; ec++) {
        print errors[ec]
    }
}

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2022-01-13
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2019-03-29
    • 2014-04-12
    相关资源
    最近更新 更多