スクリプト速度を最適化する方法は? [閉鎖]

スクリプト速度を最適化する方法は? [閉鎖]

ログで警告を探す必要があり、grepとawk(下のコード)を使用しています。しかし、VM(Ubuntu 18.04)で最初にすべてのスクリプトを実行したときに約120秒(24.5 GBのログ)がかかり、Ubuntuコンソールを使用してWin 10で実行しようとしましたが、20秒かかりました。なぜですか?)。その後、コードを変更して実行するのに約500秒かかりました。 (私が作ったものはすべて変更でした。grep -v ".tmp" folder/.grep -vF "~$" folder/.その後、もう一度変更してみましたが、速度は同じでした〜500秒。また、Cygwinを使用してWin 10で同じスクリプトを実行してみましたが、結果は約400秒でした。なぜこれが起こるのか説明できますか? Winで実行速度が速くなる理由は何ですか、状況によって(20秒、400秒、500秒)変動する理由は何ですか? (はい、私のコードがわからないことを知っていますが、今後はフィルタの数が増えてIMHOスクリプトを拡張するのが難しいと思います。)スクリプトの最適化に関する提案がある場合は、アドバイスやコメントを歓迎します。 (bashスクリプトを使用するのは今回が初めてです。)

#!/bin/bash

start=`date +%s`
clear

rm /Users/me/Desktop/Errors/*

echo "Hello"

grep -nr "Error" . | gawk -F" " '$4 ~ /Error/' | grep -v "@Trash"| grep -v "Cien" | grep -Fv "~$" | grep "\\\\server" | grep -v "Folder1" | grep "Object is being used" > /Users/me/Desktop/Errors/OU_Other.txt

gr=`grep -c "Error" /Users/me/Desktop/Errors/OU_Other.txt`
echo "OU_Other done with $gr errors"


grep -nr "Error" . | gawk -F" " '$4 ~ /Error/' | grep -v "@Trash"| grep -v "Cien" | grep -Fv "~$" | grep "\\\\server" | grep  "Folder1" | 
grep "Object being is used" >  /Users/me/Desktop/Errors/OU_Cien.txt

gr=`grep -c "Error" /Users/me/Desktop/Errors/OU_Cien.txt`
echo "OU_Cien done with $gr errors"

grep -nr "Error" . | gawk -F" " '$4 ~ /Error/' | grep -v "@Trash"| grep -Fv "~$" | grep "\\\\server" | grep -v "Access is denied" | grep -v "Object is being used" | grep -v "Cannot enumerate" > /Users/me/Desktop/Errors/Other.txt

gr=`grep -c "Error" /Users/me/Desktop/Errors/Other.txt`
echo "Other done with $gr errors"


end=`date +%s`
runtime=$((end-start))
echo "Runtime: $runtime sec"

ls -l /Users/me/Desktop/Errors/

ベストアンサー1

スピードへの悩みを簡単に回答すると、

  • WindowsでのバッシュWindowsカーネルに直接接続すべてのシステムコールとさまざまな実行可能ファイル形式を処理します。リバースワインだと思います。 Linuxアプリケーションのパフォーマンスのために特別に設計された、より少ない数の抽象化層と組み込みシステムに依存するため、より高速です。

  • 一方、Cygwin を使用すると、POSIX(y) ソフトウェアをコンパイルし、Windows から .exe として直接実行できます。これは他の目標であり、より負担のかかる目標です。なぜなら、Windowsカーネルに直接マップがないさまざまな外部システム呼び出しに対する1:1の互換性を提供するように努力する必要があるからです。

  • 仮想マシンはシステム全体をエミュレートし、特にI / O集約的な状況では、以前の2つのオプションよりも一般的に遅くなります。ただし、仮想マシンは時間の経過とともにパフォーマンスが向上します。仮想マシンを調整する方法の詳細については、仮想マシンのマニュアルを参照してください。 (はい)

速度に興味がある場合は、コンピュータにLinuxを直接インストールすることを強く検討する必要があります。試したオプションよりもはるかに高速に実行されることがわかります。

コメントですでに指摘したように、スクリプトを再構築すると、スクリプトのパフォーマンスが全体的に大幅に向上します。なるべく不要な連続操作やgrep呼び出しawkを多くしないことをお勧めします。

おすすめ記事