Awk

無法使用 AWK 重定向

  • June 9, 2020

我想使用AWK 重定向功能,到目前為止我所做的是:

$ vmstat 1 | awk ' { print $2 > "outfile" } '

*其實前面的命令awk要復雜很多,不過是一個簡化的展示。

如果我在沒有重定向的情況下執行上述命令,我將在標準輸出中獲得所需的結果。但是在重定向到 之後outfile,它仍然是空的:

$ cat outfile
$

那有什麼問題?

TIA。

awk緩衝其輸出。如果您的 awk 實現提供了它(如 gawk、mawk 1、nawk 和 BSD awk 所做的那樣),請使用fflush().

  fflush([file])        Flush any buffers associated with the open output file 
                        or pipe file.  If file is missing or if it is  the null 
                        string,  then  flush  all open output files and pipes.

所以,這樣寫:

vmstat 1 | awk '{print $2 > "outfile"; fflush()}'

GNU awk 手冊 I/O 部分fflush值得一讀。在那裡您還會發現它fflush已被下一個 POSIX 標準所接受


另外,請注意您可以給出vmstat應該輸出的樣本數。因此,如果您只想要5樣本(例如),您可以等待 5 秒,直到命令終止,然後文件將包含輸出:

vmstat 1 5 | awk '{print $2 > "outfile"}'

1使用 mawk 的語法有點不同:mawk -W interactive '{print $2 > "outfile"; fflush("")}'.

引用自:https://unix.stackexchange.com/questions/591325