2012-10-16 12 views
7

C'è un modo per leggere l'input dell'utente attraverso la programmazione awk? Provo a scrivere uno script per leggere un file che contiene il nome e l'ID dello studente. Devo ottenere il nome dello studente dall'utente tramite la tastiera e restituire tutti i risultati dello studente utilizzando l'awk.ottieni l'input dell'utente in awk

risposta

14

È possibile raccogliere l'input dell'utente utilizzando la funzione getline. Assicurati di impostarlo nel blocco BEGIN. Ecco il contenuto della script.awk:

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

$2 == name { 
    print 
} 

Ecco un esempio di file con ID, i nomi, e risultati:

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

Esegui come:

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

Assumendo il file di input viene formattato come:

name<tab>id 

coppie e si desidera stampare la linea in cui il nome del file corrisponde l'input dell'utente, provate questo:

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

o con GNU awk è possibile utilizzare nextfile in modo da non dover digitare control-D dopo il tuo input:

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

Pubblica alcuni esempi di input e output previsti se non è quello che stai cercando di fare.

+3

+1 file successivo ... Posso sempre imparare le cose leggendo la tua risposta. anche se tutti gli elementi sono nella pagina man. Hai appena dato una bella spiegazione con esempi pratici ... rendili facili da ricordare. grazie. – Kent

+1

+1, secondo! –

1

Ho provato con la linea

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

e per me è una soluzione migliore e più readeable.