awk
スクリプトでは時間がたつにつれてメモリがますます使用されていたことがわかりました。メモリに何かを保存するはずがないので、いくつかのテストを行うことにしました。awk matchコマンドとメモリの使用
これは非常に単純なスクリプトです(私の方が大きいですが、私は非常に基本的な問題を再現しています)。私のawk
スクリプトはbash
スクリプト内で使用され、$file
変数はawk
が実行されるファイルです。私は、各行がword
を含有する大きなファイルにこのスクリプトを実行すると、私は、ファイルに印刷する場合
awk '
{
if(match($0,"word"))
{
line=substr($0, RSTART - 20, RLENGTH + 20)
print line
}
}
' "$file"
は、awk
スクリプトのメモリ使用量はさらに速く、超高速高めています。私はそれが私のコンピュータをフリーズする前にそれを停止しなければならない。この大きなメモリ使用量の原因は何ですか? 私の実際のスクリプトでは、ファイルは通常小さく、match
関数はこの関数のようにすべての行にトリガされませんが、間違いがないことを確認することをお勧めします。
EDIT:この問題は、mawkを使用しているときには表示されないようですが、GNU awkの場合のみ、なぜそうは思われません。
Input_fileに言及して "$ file"を入れたのはなぜか分かりませんか?また、サーバなどの新しいセッションを取って、バックグラウンドで何が起こっているのかを伝えるトップやvmstatなどのコマンドを実行して、メモリとCPUをチェックしてみてください。 – RavinderSingh13
topでチェックし、メモリ使用量が3秒ごとに4%増えました(2GBのVM上)。ファイルに印刷すると、3秒ごとに12%増加する可能性があります。私はあなたが言及したInput_fileについて理解しておらず、スクリプトは '$ file'変数に格納されているファイルで実行されています。 – Whin3
それでは、高メモリとCPUを見つけるためにコマンド(あなたが使っているものは何でも)は、このスクリプトがそれを担当していることを示していますか?あなたはメモリまたはCPUによってそれを並べ替えることができ、誰が犯人であるかを見ることができます。 また、あなたはファイルが変数から来ていると言いました、同意します。このawkを呼び出す前にどのような操作をしていますか?あなたを援助するためにもそれらを知る必要があるかもしれません。親切にも同じことの詳細をすべてお知らせください。 – RavinderSingh13