determina o início do arquivo ao passar arquivos multipe para o awk

3

Eu tenho um script de shell como o seguinte -

find "." "Account" -maxdepth 1 -name "*.aspx" | xargs awk -f get_controls.awk

Ele passa vários arquivos para um script awk

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

Eu quero imprimir o nome do arquivo atual do shell script ou do awk no início do arquivo.

O awk sabe o nome do arquivo atual, está na variável FILENAME, mas não consigo determinar o início do arquivo. Eu tentei (NR==1) , mas todos os arquivos são passados para awk como um fluxo e o valor de NR continua aumentando.

Apenas percebi isso enquanto eu digito isso. Vai postar resposta abaixo!

    
por bryan 30.09.2011 / 21:14

2 respostas

2

Além de NR , que conta todos os registros processados até agora, o awk tem um FNR , que conta os registros no arquivo atual.

Para imprimir o nome do arquivo quando você vê a primeira linha de um arquivo:

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

Se você tiver acesso a gawk , você também terá, além de BEGIN e END blocos, BEGINFILE e ENDFILE bloqueia.

    
por 30.09.2011 / 21:29
1

Aqui está o que eu descobri ao digitar a pergunta, às vezes me esqueço de pensar no awk como uma linguagem de programação.

#! /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);
}
    
por 30.09.2011 / 21:15