我有一个类似下面的 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
,除了BEGIN
和END
块之外,您还可以获得BEGINFILE
和ENDFILE
块。
答案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);
}