получить пользовательский ввод в awk

есть ли способ прочитать пользовательский ввод через программирование awk? Я пытаюсь написать сценарий, чтобы прочитать файл, содержащий имя и идентификатор студента. Я должен получить имя студента от пользователя через клавиатуру и вернуть все результаты студента с помощью awk.

3 ответов


вы можете собирать пользовательский ввод с помощью . Обязательно установите это в BEGIN блок. Вот содержание script.awk:

BEGIN {
    printf "Enter the student's name: "
    getline name < "-"
}

 == name {
    print
}

вот пример файла с идентификаторами, именами и результатами:

1 jonathan good
2 jane bad
3 steve evil
4 mike nice

выполнить, как:

awk -f ./script.awk file.txt

предполагая, что входной файл имеет формат:

name<tab>id

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

awk '
BEGIN { FS=OFS="\t"; printf "Enter name: " }
NR == FNR { name = ; next }
 == name
' - file

или с GNU awk вы можете использовать nextfile, поэтому вам не нужно вводить control-D после ввода:

awk '
BEGIN { FS=OFS="\t"; printf "Enter name: " }
NR == FNR { name = ; nextfile }
 == name
' - file

опубликуйте некоторые примеры ввода и ожидаемого вывода, если это не то, что вы пытаетесь сделать.


я протестировал с line

"awk 'BEGIN{printf "enter:";getline name<"/dev/tty"} {print } END{printf "[%s]", name}' < /etc/passwd" 

и для меня это лучшее решение и более читаемый.