2012-10-16 72 views
7

是否有任何方法通過awk編程讀取用戶輸入? 我嘗試編寫腳本來讀取包含學生姓名和ID的文件。 我必須通過鍵盤從用戶那裏獲得學生的姓名,並使用awk返回所有學生的成績。在awk中獲取用戶輸入

回答

14

您可以使用getline函數收集用戶輸入。請務必在BEGIN區塊中進行設置。下面是script.awk內容:

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

$2 == name { 
    print 
} 

這裏的具有ID的,名稱,和結果的示例的文件:

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

執行命令等:

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

假設輸入文件的格式爲:

name<tab>id 

雙你想打印該文件的名稱中用戶輸入相匹配的線,試試這個:

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

或與GNU awk的,你可以用下一文件,所以你不必後進入控制d你的輸入:

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

發佈一些示例輸入和預期的輸出,如果這不是你想要做的。

+3

+1 nextfile ...我總是可以通過閱讀你的答案來學習東西。即使所有的東西都在手冊頁中。你只是用實際的例子給出了很好的解釋。使它們容易被人記住。謝謝。 – Kent

+1

+1,我秒! –

1

我已經與線

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

測試,對我來說是更好的解決方案,更readeable。