首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk -从文件和STDIN获得输入?

问awk -从文件和STDIN获得输入?
EN

Unix & Linux用户
提问于 2012-11-12 15:50:55
回答 2查看 7.4K关注 0票数 5

是否可以同时从文件和终端获得输入?我想在awk脚本的END部分询问用户一些问题。

该输入应该由用户输入,而不是从要处理数据的文件中读取。

代码语言:javascript
复制
END {
  getline choice
  if(choice == "Y")
    print "OK"
}

但是选择是从输入文件中读取的。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2012-11-12 15:59:48

您可以从/dev/tty或/dev/stdin阅读。

代码语言:javascript
复制
getline choice < "/dev/tty"

/dev/tty是相当普遍的(即使是极少数,以及POSIX所要求的/dev/null和/dev/console ),/dev/stdin并不那么常见,但是至少GNU会识别它为stdin的意思,即使系统没有这样的设备/特殊文件。

在Linux (和Cygwin,但不是其他Unix-like)上,从/dev/stdin读取与从stdin (fd 0)读取不同,而是意味着从fd 0上打开的相同文件中读取。例如,如果该文件是一个常规文件,那么它将从文件的开头开始读取,而不是fd0当前指向文件中的位置。

因为GNU awk自己处理像/dev/stdin这样的路径(并将其视为从stdin读取),所以在Linux或Cygwin上,它的行为将不同于其他不进行特殊处理的应用程序。如果您希望gawk中的Linux/Cygwin行为(这里可能不是您的情况),您可以使用///dev/stdin或/dev/./stdin for gawk来停止将其识别为/dev/stdin特例,或者如果您打算依赖于Linux/Cygwin特定的行为,则可以使用Linux/Cygwin特定的/proc/self/fd/0路径( /dev/stdin实际上在这些系统上的符号链接)。

票数 6
EN

Unix & Linux用户

发布于 2015-08-29 21:01:27

作为可以看到,-也可以工作:

代码语言:javascript
复制
getline < "-"

或

代码语言:javascript
复制
getline variable < "-"
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/55517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档