2012-10-16 10 views
7

Czy istnieje sposób na odczytanie danych wprowadzanych przez użytkownika za pośrednictwem programowania awk? Próbuję napisać skrypt, aby przeczytać plik zawierający imię i nazwisko ucznia. Muszę uzyskać nazwę ucznia od użytkownika za pomocą klawiatury i zwrócić wszystkie wyniki ucznia za pomocą awk.pobranie danych wejściowych użytkownika w awk

Odpowiedz

14

Można pobierać dane wprowadzane przez użytkownika za pomocą funkcji getline. Upewnij się, że ustawiono to w bloku BEGIN. Oto treść script.awk:

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

$2 == name { 
    print 
} 

Oto przykładowy plik z identyfikatorami, nazwiskami i wyników:

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

Run Like:

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

Zakładając, że plik wejściowy jest sformatowana jako:

name<tab>id 

pary i chcesz drukować linię gdzie nazwa w pliku pasuje do wprowadzania danych przez użytkownika, spróbuj tego:

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

lub GNU awk można użyć nextfile, dzięki czemu nie trzeba wprowadzać control-D po dane wejściowe:

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

Opublikuj kilka przykładowych danych wejściowych i oczekiwanych wyników, jeśli nie jest to coś, co próbujesz zrobić.

+3

+1 nextfile ... Zawsze mogę się uczyć, czytając odpowiedź. mimo że wszystkie rzeczy są na stronie man. Po prostu wyjaśniłeś praktyczne przykłady. Ułatw je zapamiętać. Dziękuję Ci. – Kent

+1

+1, drugi raz! –

1

Przetestowałem z linii

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

i dla mnie jest lepszym rozwiązaniem i bardziej readeable.

Powiązane problemy