2012-10-16 9 views
7

Gibt es eine Möglichkeit, die Benutzereingabe über die awk-Programmierung zu lesen? Ich versuche ein Skript zu schreiben, um eine Datei zu lesen, die den Namen und die ID des Schülers enthält. Ich muss den Namen des Schülers vom Benutzer über die Tastatur abrufen und alle Schülerergebnisse mit dem awk zurückgeben.Erhalte die Benutzereingabe in awk

Antwort

14

Sie können Benutzereingaben mit der Funktion getline erfassen. Stellen Sie sicher, dass dies im Block BEGIN festgelegt ist. Hier ist der Inhalt von script.awk:

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

$2 == name { 
    print 
} 

Hier ist eine Beispieldatei mit IDs, Namen und Ergebnisse:

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

Run like:

awk -f ./script.awk file.txt 
7

die Eingabedatei Angenommen wird formatiert, wie:

name<tab>id 

Paare und Sie die Zeile drucken, wo der Name in der Datei der Benutzereingabe entspricht, versuchen Sie dies:

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

oder mit GNU awk können Sie verwenden nextfile so haben Sie die Kontrolle-D nicht zu betreten, nachdem Ihre Eingabe:

Geben Sie eine Beispieleingabe und die erwartete Ausgabe ein, wenn Sie das nicht versuchen.

+3

+1 nextfile ... Ich kann immer Dinge lernen, indem ich Ihre Antwort lese. obwohl alle Sachen in Manpage sind. Sie haben nur eine schöne Erklärung mit praktischen Beispielen gegeben. Machen Sie sie leicht zu merken. Danke. – Kent

+1

+1, ich zweite das! –

1

Ich habe mit der Linie

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

getestet und für mich ist bessere Lösung und mehr readeable.