如何打印作为参数传递给awk程序的文件名

如何打印作为参数传递给awk程序的文件名,awk,Awk,我使用for循环来迭代文件列表,每次操作时,我都会将一个文件名传递给awk脚本 我不仅要打印错误代码,还要打印生成错误的文件名 类似于:打印错误“;”文件名>>FILE.txt awk脚本如下所示: awk ' function errorManager(error) { print error >> file.txt; } BEGIN {error1="ERROR CODE X"} {if (NR==1) if(length($0) != 10) { errorManager(er

我使用for循环来迭代文件列表,每次操作时,我都会将一个文件名传递给awk脚本

我不仅要打印错误代码,还要打印生成错误的文件名

类似于:打印错误“;”文件名>>FILE.txt

awk脚本如下所示:

awk ' function errorManager(error)
{
print error >> file.txt;
}
BEGIN {error1="ERROR CODE X"}
{if (NR==1)
if(length($0) != 10)
{
errorManager(error1)
}
}
END{print "STOP"}' $1

这就是你要找的:

awk '
function errorManager(idx,    errorArr, error) {
    errorArr[1] = "ERROR CODE X"
    error = (idx in errorArr ? errorArr[idx] : "Unspecified Error")
    printf "Error %s[%d]: %s\n", FILENAME, FNR, error | "cat>&2"
}
NR==1 {
    if ( length($0) != 10 ) {
        errorManager(1)
    }
}
END{ print "STOP" }
' "$1" 2>"file.txt"

根据手册页,它是变量
FILENAME
(虽然我不知道这是否是特定于gawk的事情),它不是特定于gawk的,它在所有awk中都是相同的。