awk - 在循环内使用 getline

标签 awk while-loop

考虑这个脚本

#!awk -f
BEGIN {
  "date" | getline foo
  print foo
}

它将按预期打印当前日期。但是如果你把它放在一个循环中
#!awk -f
BEGIN {
  while (1) {
    "date" | getline foo
    printf "%s\r", foo
  }
}

它只是重复打印相同的日期。我想捕捉外部
命令在循环中使用 getlinesystem

最佳答案

您需要关闭该进程才能让 awk 再次生成它。

BEGIN {
  while (1) {
    "date" | getline foo
    printf "%s\n", foo
    close("date")
  }
}

我希望您原件中的后续阅读实际上在 EOF 上失败并离开 foo未设置。
$ awk 'BEGIN {
  while (1) {
    print "ret: " ("date" | getline foo)
    printf "%s\n", foo
  }
}'
ret: 1
Fri Nov 28 15:17:07 EST 2014
ret: 0
Fri Nov 28 15:17:07 EST 2014

关于awk - 在循环内使用 getline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194890/

相关文章:

bash - 3 制表符分隔文件中的文件字符串匹配模式 awk

将数据添加到数据库的 Linux bash 脚本

linux - 从文本中查找重复项的位置

c++ - c++新手被卡住了

java - 在java中用循环迭代行

c++ - C++ 中的字符串验证

java - 在没有哨兵的情况下结束 while 循环

python - python中的while语句

awk - 使用带有if条件的awk分析两个文件

bash - 在 awk 中设置 bash 变量