見ているこの問題awk
、ファイルが標準入力にパイプされていると、ユーザー入力を読み取ることはできませんが、コマンドライン引数として指定されたファイルから入力を読み取ることが期待どおりに機能することを確認しました。
たとえば、スクリプトに次のBEGINブロックがあるとしますawk
。
BEGIN {
printf "Enter input: "
getline var < "-"
}
これを実行すると、awk -f ./script.awk file.txt
ユーザーに入力するように求められ、処理が続行されますfile.txt
。ただし、これを実行すると、cat file.txt | awk -f ./script.awk
awkがパイプから取得した内容をユーザー入力として解釈すると考えられます(したがって、最初の行がgetline
埋められます)。var
file.txt
awk
ファイルから読み取るように動作しますが、パイプで使用する方法はありますか?
もちろん、一時ファイルを使用することもできますが、これはエレガンスから離れています。
ベストアンサー1
プロセスの置き換えは簡単な場合には機能しますが、パイプデータを処理しながらコンソールユーザーと対話できる一般的なアプローチは次のとおりです。
BEGIN {
printf "Enter input: " > "/dev/tty"
getline var < "/dev/tty"
print var
}