2012-10-16 8 views
7

awkプログラミングを通じてユーザー入力を読み取る方法はありますか? 私は、生徒の名前とIDを含むファイルを読むためのスクリプトを書こうとしています。 キーボードから生徒の名前を取得し、awkを使ってすべての生徒の結果を返す必要があります。awkでユーザー入力を取得

答えて

14

getline機能を使用してユーザー入力を収集できます。これをBEGINブロックに設定してください。ここscript.awkの内容です:

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

$2 == name { 
    print 
} 

ここでのIDの、名前、および結果を例ファイルです:入力ファイルは次のようにフォーマットされたと仮定すると

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

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

ランなどは:

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

またはGNUとあなたがした後、コントロール-Dを入力する必要はありませんので、あなたがnextfile使用することができますawkは:ペアと、ファイル内の名前は、ユーザーの入力と一致する行を印刷するには、これを試してくださいあなたの入力:

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

いくつかのサンプル入力と期待される出力が、あなたがしようとしていないものであれば投稿してください。

+3

+1次のファイル...私はいつもあなたの答えを読んで物事を学ぶことができます。すべてのものはマニュアルページに入っています。あなたは実用的な例を使って素敵な説明をしただけです。ありがとうございました。 – Kent

+1

+1、私はそれを2番目に! –

1

私はライン

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

でテストされ、私のために、より良いソリューション、よりreadeableありました。

関連する問題