シェルスクリプト作成したが重すぎて中々完了しない!
ということがありませんか?
シェルスクリプトの書き方で重くならないようにするコツがあります。
それを今回、説明したいと思います。
目次【本記事の内容】
- シェルスクリプトの実行が重くなる理由
- 重くなる記述とは
- 処理を軽くする記述
シェルスクリプトの実行が重くなる理由
まず、シェルスクリプトを作成して実行しても中々終わらなくなってしまう理由。
それは、
「処理する回数が多いから」
です。
それはそうですよね。
処理する回数が多ければその分時間がかかって終わらなくなります。
ではなぜ、処理する回数が多くなってしまうのでしょうか。
それは記述方法が重くなるような記述をしているからです。
では、
重くなる記述とは
重くなる記述とは、原因を見ると大体これです。
「ループ文を多用している」
例えば、テキストファイルを1行ずつ読み込み、grep等の検索を実行すると
読み込んだ分だけgrep処理を行うことになり、処理が多くなってしまいます。
(1万行のテキストファイルで行った場合には1万回grepすることになる!!)
これは重くなりますよね。。。
でもどうしたら? 検索しないと処理できないし。。。
そのような場合の対策方法を以降に記載したいと思います。
処理を軽くする記述
先ほど、テキストファイルを1行ずつ読み込み、grepする例をお話しました。
では、どういう記述にすれば処理を軽くできるのでしょうか。
下の例で考えてみましょう。
# 行数分 grep が起動するので、とても遅い
while read -r line; do
printf ‘%s’ “$line“ |grep ‘foo’
done <data.txt
これだと”foo”をdata.txtから探すのにすべての行を表示して
grepを実施するので重くなります。
これを
grep ‘foo’ data.txt
とするとgrep一度でテキストを探索してくれますので処理が軽くなります。
また、
「シェルスクリプトはインタプリタでありコードの解釈~実行が遅い」
ということもあります。
そのため、なるべくシェルでのループは使わずコマンドで処理する記述にしましょう。
そのためにはawkも使えるので次回はawk等についても記載したいと思います。
コメント