3

У меня есть сценарий оболочки, как показано ниже -

находить "." "Account" -maxdepth 1 -name "* .aspx" | xargs awk -f get_controls.awk

Он передает несколько файлов в сценарий awk

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

Я хочу распечатать текущее имя файла из сценария оболочки или из awk в начале файла.

Awk знает текущее имя файла, оно находится в переменной FILENAME, но я не могу определить начало файла. Я пытался (NR==1) , но все файлы передаются в awk в виде потока, и значение NR продолжает расти.

Просто понял это, когда я наберу это. Выложу ответ ниже!

2 ответа2

2

В дополнение к NR , который подсчитывает все обработанные записи, awk имеет переменную FNR , которая подсчитывает записи в текущем файле.

Чтобы напечатать имя файла, когда вы видите первую строку файла:

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

Если у вас есть доступ к gawk , вы также получите, помимо блоков BEGIN и END блоки 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);
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .