Я пишу gawk-скрипт, который начинается
#!/bin/gawk -f
BEGIN { print FILENAME }
Я вызываю файл через ./script file1.html
, но скрипт ничего не возвращает. Любые идеи?
Я пишу gawk-скрипт, который начинается
#!/bin/gawk -f
BEGIN { print FILENAME }
Я вызываю файл через ./script file1.html
, но скрипт ничего не возвращает. Любые идеи?
вы можете использовать ARGV[1] вместо FILENAME, если вы действительно хотите использовать его в блоке BEGIN
awk 'BEGIN{print ARGV[1]}' file
./script file1.html
это единственный способ, которым это когда-либо будет работать, это нормально. Если вы когда-нибудь добавите ./script --argument1ofn file1.html
, вы снова облажаетесь.
- person JUST MY correct OPINION; 27.03.2011
Вы можете напечатать имя файла, когда встретите строку 1:
FNR == 1
Если вы хотите быть менее загадочным, более понятным:
FNR == 1 {print}
Мои первые два решения были неверны. Спасибо, Денис, за указание. Его путь правильный:
FNR == 1 {print FILENAME}
FNR == 1 {print FILENAME}
(другими словами, хотя ваш менее загадочный подход будет применяться в случае печати $0
, он (и имя переменной) требуется в этом случае). +1 в любом случае
- person Dennis Williamson; 09.02.2012
Прямо со страницы руководства (слегка переформатированный):
FILENAME: Имя текущего входного файла. Если в командной строке файлы не указаны, значение FILENAME равно «-». Однако FILENAME не определено внутри блока BEGIN (если только оно не установлено getline).
Основываясь на ответе Хай Ву, я предлагаю, чтобы, если вы хотите, чтобы имя файла печаталось только один раз для каждого файла, оно должно быть заключено в условное условие.
if(FNR == 1) { print FILENAME };