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
7
A
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.
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.
+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, ich zweite das! –