awk - ファイルとSTDINから入力を受け取りますか?

awk - ファイルとSTDINから入力を受け取りますか?

ファイルと端末から入力を受け取ることができますか?ENDawkスクリプト部分でユーザーにいくつかの質問をしたいと思います。

この入力は、処理するデータを含むファイルから読み取るのではなく、ユーザーが入力する必要があります。

END {
  getline choice
  if(choice == "Y")
    print "OK"
}

ただし、選択は入力ファイルから読み込まれます。

答え1

/dev/ttyからまたはで読むことができます/dev/stdin

getline choice < "/dev/tty"

/dev/tty/dev/nullかなり一般的で(まれであり、POSIX/dev/consoleで要求されている場合でも)、あまり/dev/stdin一般的ではありませんが、少なくともGNU awkはシステムにそのようなデバイス/特殊ファイルがない場合でもstdinとして認識します。

Linux(およびCygwin(他のUnixファミリーを除く))では、読み取りは/dev/stdinstdin(fd 0)で読み取るのと同じではなく、むしろfd 0で開かれた同じファイルから読み取ることを意味します。たとえば、ファイルが通常のファイルの場合、fd 0は現在のファイルを指す場所ではなく、ファイルの先頭から読み取りを開始します。

GNUはawkパス自体を処理し、/dev/stdinそれをstdinから読み取ることで処理するため、LinuxやCygwinでは特別な処理を行わない他のアプリケーションとは異なる動作をします。 Linux / Cygwinの動作gawk(ここでは該当しない場合があります)が必要な場合、または///dev/stdin停止/dev/./stdinを使用gawkして特殊なケースとして識別できます/dev/stdin。または、Linux/Cygwin 固有の動作に依存する場合は、Linux を使用する方がよいでしょう。 /Cygwin 特定の/proc/self/fd/0パス (/dev/stdin実際にはこれらのシステムではシンボリックリンク)。

答え2

〜のように見える-また利用できる:

getline < "-"

または

getline variable < "-"

関連情報