2012-10-16 32 views
7

Kullanıcı girişini awk programlama yoluyla okumak için herhangi bir yol var mı? Öğrencinin adı ve kimliğini içeren bir dosyayı okumak için bir komut dosyası yazmaya çalışıyorum. Kullanıcıdan klavyeyi kullanarak öğrencinin adını almalı ve tüm öğrencinin sonuçlarını awk kullanarak geri vermeliyim.awk içindeki kullanıcı girişini al

cevap

14

Kullanıcı girdisini getline işlevini kullanarak toplayabilirsiniz. Bunu BEGIN satırında ayarladığınızdan emin olun. İşte script.awk içeriği var: Burada

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

$2 == name { 
    print 
} 

oluyor kimlikleri, adları ve sonuçları ile bir örnek dosyası: olarak biçimlendirilir

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

giriş dosyasını varsayarsak:

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

Run gibi:

name<tab>id 
Eğer sonra kontrol-D girmek zorunda kalmamak için

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

veya GNU ile siz nextfile kullanabilirsiniz awk:çiftleri ve dosyada adı kullanıcı girişi eşleşen satır yazdırmak istediğiniz, bu deneyin Sizin girişiniz:

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

Yapmaya çalıştığınız şey değilse, bazı örnek girişler ve beklenen çıktılar gönderin.

+3

+1 nextfile ... Her zaman cevabınızı okuyarak bir şeyler öğrenebilirim. her şey insan sayfalarında olsa bile. Pratik örneklerle güzel bir açıklama yaptınız. Hatırlanmaları kolaylaştırın. teşekkür ederim. – Kent

+1

+1, ikinciye! –

1

Ben çizgi

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

ile test ve benim için iyi bir çözüm ve daha readeable olduğunu ettik.

İlgili konular