将多页文件传递给awk时确定文件的开头


3

我有一个像以下一样的shell脚本 -

找 ”。” “帐户”-maxdepth 1 -name“* .aspx”| xargs awk -f get_controls.awk

它将多个文件传递给awk脚本

BEGIN{
    FS="\""
}
...
/Src=/{
    printf("\t%s \r\n", $6);
}

我想从shell脚本或文件开头的awk中打​​印出当前文件名。

awk确实知道当前的文件名,它在FILENAME变量中,但我无法确定文件的开头。我试过(NR==1),但所有文件都作为流传递给awk,NR的值不断增加。

在我打字的时候想出来了。将在下面发布答案!

Answers:


2

除了NR计算到目前为止处理的所有记录之外,awk还有一个FNR变量,用于计算当前文件中的记录。

要在看到文件的第一行时打印文件名:

awk 'FNR == 1 {print "now processing " FILENAME}' file ...

如果您有权访问gawk,除了BEGINEND阻止BEGINFILE以及ENDFILE阻止外,您还可以获得访问权限。


1

这是我在输入问题时想到的,有时我忘记将awk视为一种编程语言。

#! /usr/bin/awk -f
BEGIN{
    FS="\""
    OLDFILENAME=""
}


/Src=/{
    if(OLDFILENAME != FILENAME) 
    {
          printf("\r\n%s  \r\n", FILENAME);
          OLDFILENAME=FILENAME
        }
    printf("\t%s \r\n", $6);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.