GAWK Script - Распечатать имя файла в разделе BEGIN - PullRequest
10 голосов
/ 26 марта 2011

Я пишу сценарий gawk, который начинается

#!/bin/gawk -f
BEGIN { print FILENAME }

Я вызываю файл через ./script file1.html, но сценарий просто ничего не возвращает.Есть идеи?

Ответы [ 4 ]

12 голосов
/ 26 марта 2011

вы можете использовать ARGV [1] вместо FILENAME, если вы действительно хотите использовать его в блоке BEGIN

awk 'BEGIN{print ARGV[1]}' file
9 голосов
/ 26 марта 2011

Вы можете напечатать имя файла при встрече со строкой 1:

FNR == 1

Если вы хотите быть менее загадочным, проще понять:

FNR == 1 {print}

ОБНОВЛЕНИЕ

Мои первые два решения были неверны.Спасибо Деннис за то, что указал на это.Его путь верен:

FNR == 1 {print FILENAME}
7 голосов
/ 26 марта 2011

Прямо со страницы руководства (слегка переформатированный):

FILENAME: имя текущего входного файла. Если в командной строке не указано файлов, значение FILENAME равно «-». Однако FILENAME не определено внутри блока BEGIN (если не установлено getline).

1 голос
/ 18 апреля 2016

Опираясь на ответ Хай Ву, я полагаю, что если вы хотите, чтобы имя файла печаталось один раз для каждого файла, его необходимо заключить в условное выражение.

...