Gawk Script-вывести имя файла в разделе BEGIN


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

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

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

4 9

4 ответа:

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

awk 'BEGIN{print ARGV[1]}' file

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

FNR == 1

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

FNR == 1 {print}

Обновление

Мои первые два решения были неверными. Спасибо, Деннис, что указал на это. Его путь верен:
FNR == 1 {print FILENAME}

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

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

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

if(FNR == 1) { print FILENAME };