是否可以从文件和终端获取输入?我想END在 awk 脚本的部分向用户询问一些问题。
该输入应由用户输入,而不是从包含要处理的数据的文件中读取。
END {
getline choice
if(choice == "Y")
print "OK"
}
Run Code Online (Sandbox Code Playgroud)
但是选择是从输入文件中读取的。
您可以从/dev/tty或 从/dev/stdin.
getline choice < "/dev/tty"
Run Code Online (Sandbox Code Playgroud)
/dev/tty是相当普遍存在的(甚至是一个极少数,随着/dev/null和/dev/console通过POSIX要求),/dev/stdin较少见,但至少GNU AWK将其识别为标准输入的意思即使系统没有这样的设备/特殊文件。
在 Linux(和 Cygwin,但不是其他类 Unix)上,读取与/dev/stdin从 stdin (fd 0) 读取不同,而是意味着读取与在 fd 0 上打开的文件相同的文件。如果该文件是常规文件例如,这将从文件的开头开始读取,而不是 fd 0 当前指向文件中的位置。
因为 GNUawk像/dev/stdin自己一样处理路径(并将其视为从标准输入读取),所以在 Linux 或 Cygwin 上,它的行为与其他不进行特殊处理的应用程序不同。如果您想要 Linux/Cygwin 行为gawk(这可能不是您的情况),您可以使用///dev/stdin或/dev/./stdinforgawk停止将其识别为/dev/stdin特殊情况,或者如果您打算依赖 Linux/Cygwin 特定行为,则可能会更好,使用 Linux/Cygwin 特定/proc/self/fd/0路径(/dev/stdin实际上是这些系统上的符号链接)。