AWKを使用してリダイレクトできません。

AWKを使用してリダイレクトできません。

使いたいAWKリダイレクト機能これまで私がしたことは次のとおりです。

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

*実際には、以前のコマンドはawkはるかに複雑ですが、単純化されたデモです。

リダイレクトなしで上記のコマンドを実行すると、標準出力から必要な結果が得られます。しかし、次にリダイレクトした後もoutfile:まだ空です。

$ cat outfile
$

これは何の問題ですか?

ティア。

ベストアンサー1

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("")}'

おすすめ記事