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

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

我有一个类似下面的 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 的值不断增加。

我刚打完字就想通了。将在下面发布答案!

答案1

除了NR统计迄今为止处理的所有记录之外,awk 还有一个FNR变量,它统计当前文件中的记录数。

当您看到文件的第一行时打印文件名:

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

如果您有权访问gawk,除了BEGINEND块之外,您还可以获得BEGINFILEENDFILE块。

答案2

这是我在输入问题时想到的,有时我会忘记将 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);
}

相关内容