使いたい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("")}'
。