AWK-将一行打印为输出文件中的第一个记录

时间:2013-11-21 13:49:31

标签: printing awk

这是问题所在:

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

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

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

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

1 个答案:

答案 0 :(得分:4)

您需要将错误消息保存到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]
    }
}