ログで警告を見つける必要があり、awk(以下のコード)でgrepを使用しています。しかし、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秒)によって変動するのはなぜですか?(はい、私のコードがひどいことは理解していますが、将来的にはフィルターの数が増え、スクリプトを拡張するのが難しくなると思います)。スクリプトを最適化するためのアドバイスがあれば、提案や意見を喜んで受け入れます(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/
速度に関する懸念に簡単に答えるために、
WindowsのBashは、Windowsカーネルに直接接続して、すべてのシステムコールとさまざまな実行可能形式を処理します。逆ワインと考えてください。抽象化レイヤーの数が少なく、Linuxアプリのパフォーマンスを念頭に置いて特別に設計された組み込みシステムに依存しているため、高速です。
一方、Cygwinでは、POSIX(y)ソフトウェアをコンパイルして、Windows上で.exeとしてネイティブに直接実行できます。これは別の目標であり、より負担のかかる目標です。Windowsカーネルに直接マッピングされていないさまざまな外部システムコールに1:1の互換性を提供するために、距離を置く必要がある場合があるためです。
仮想マシンはシステム全体をエミュレートし、特に集中的なI / Oの場合は、前の2つのオプションよりも一般的に低速ですが、時間の経過とともにますます良くなっています。調整方法については、仮想マシンのドキュメントを参照してください。(例)
速度が気になる場合は、Linuxをマシンに直接インストールすることを強く検討する必要があります。あなたはそれがあなたが試したどのオプションよりもはるかに速く実行することに気付くでしょう。
ただし、コメントですでに述べたように、スクリプトを書き直すと、スクリプトのパフォーマンスが全体的に大幅に向上する可能性がgrep
ありawk
ます。不要な連続呼び出しや呼び出しがそれほど多くないことが望ましいです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加