簡體   English   中英

(g)awk似乎會緩存shell命令的輸出-如何避免這種情況?

[英](g)awk seems to cache output of shell commands - how to avoid that?

我對gawk有一個奇怪的問題,我不知道這是我只是不了解的錯誤還是awk的默認行為。 基本上,當我在awk腳本中執行shell命令並使用getline捕獲其輸出時,該命令的所有連續調用似乎都產生與第一個相同的輸出。 這是一個例子:

# <foo.awk 

BEGIN {
  for(i = 0; i < 5; i++) {
    "date +%s" | getline sec
    print sec
    system("sleep 1")
  }
}
# gawk -f foo.awk
1436437519
1436437519
1436437519
1436437519
1436437519
# 

我想知道這種行為是否是故意的,並在手冊的某處進行了說明(我什么都找不到),以及是否有解決方法。

每次執行命令完成后,都必須關閉管道:

$ cat foo.awk
BEGIN {
  cmd = "date +%s"
  for(i = 0; i < 5; i++) {
    cmd | getline sec
    print sec
    close(cmd)
    system("sleep 1")
  }
}

$ awk -f foo.awk
1436451378
1436451379
1436451380
1436451381
1436451382

確保您已閱讀並完全理解Arnold Robbins(特別是http://www.gnu.org/software/gawk/manual/gawk.html#Getline_002fVariable_002fPipe )(有效的Awk編程,第4版,第四版)中的getline部分。如果您正在考慮使用getline,則可以在http://awk.info/?tip/getline上了解所有內容,然后通常會發現有更好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM