是否可以从文件和终端获取输入?我想在END
awk 脚本的部分询问用户一些问题。
该输入应该由用户输入,而不是从包含要处理的数据的文件中读取。
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-likes)上,读取/dev/stdin
与从 stdin (fd 0) 读取不同,而是意味着从与 fd 0 上打开的同一文件读取。如果该文件是常规文件例如,这将从文件的开头开始读取,而不是从 fd 0 当前指向文件的位置开始读取。
由于 GNU自行awk
处理路径/dev/stdin
(并将其视为从 stdin 读取),因此在 Linux 或 Cygwin 上,它的行为与其他不进行特殊处理的应用程序不同。如果您想要 Linux/Cygwin 行为gawk
(这里可能不是您的情况),您可以使用///dev/stdin
或/dev/./stdin
forgawk
停止将其识别为/dev/stdin
特殊情况,或者如果您打算依赖 Linux/Cygwin 特定行为,则可能更好,使用 Linux/Cygwin 特定/proc/self/fd/0
路径(/dev/stdin
实际上是这些系统上的符号链接)。