2012-10-16 8 views
7

में उपयोगकर्ता इनपुट प्राप्त करें क्या अजीब प्रोग्रामिंग के माध्यम से उपयोगकर्ता इनपुट पढ़ने का कोई तरीका है? मैं एक फ़ाइल पढ़ने के लिए एक स्क्रिप्ट लिखने का प्रयास करता हूं जिसमें छात्र का नाम और आईडी शामिल है। मुझे कीबोर्ड से उपयोगकर्ता के माध्यम से छात्र का नाम प्राप्त करना होगा और अजीब का उपयोग करके सभी छात्र के परिणामों को वापस करना होगा।अजीब

उत्तर

14

आप getline फ़ंक्शन का उपयोग कर उपयोगकर्ता इनपुट एकत्र कर सकते हैं। इसे BEGIN ब्लॉक में सेट करना सुनिश्चित करें।

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

भागो की तरह: आईडी, नाम, और परिणाम के साथ एक उदाहरण फ़ाइल है

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

$2 == name { 
    print 
} 

यहाँ:

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

इनपुट फ़ाइल मान लिया जाये कि इस प्रारूप में उपलब्ध है यहाँ script.awk की सामग्री है:

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

या जीएनयू साथ AWK आप nextfile उपयोग कर सकते हैं ताकि आप के बाद नियंत्रण-डी में प्रवेश करने की जरूरत नहीं है:जोड़े और आप लाइन जहां फाइल में नाम उपयोगकर्ता इनपुट से मेल खाता है प्रिंट करना चाहते हैं, इस कोशिश अपने इनपुट:

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

पोस्ट कुछ नमूना इनपुट और उम्मीद उत्पादन करता है, तो यह है कि आप क्या करने की कोशिश कर रहे हैं क्या नहीं है।

+3

+1 अगली फाइल ... मैं हमेशा अपना जवाब पढ़कर चीजें सीख सकता हूं। भले ही सभी सामान मैन पेज में हैं। आपने व्यावहारिक उदाहरणों के साथ अच्छा स्पष्टीकरण दिया है .. उन्हें याद रखना आसान बनाते हैं। धन्यवाद। – Kent

+1

+1, मैं दूसरा हूं! –

1

मैं लाइन

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

साथ परीक्षण किया है और मेरे लिए बेहतर समाधान और अधिक readeable है।