私が理解しているのは、必要な出力を得るためにより多くのコマンドを実行するほど、実行時間が長くなります。
一度見てください。
time find /opt/platforms/ -name '*trading*cfg' | xargs grep SenderCompID | awk -F= '{print $2};
real 0m0.008s
user 0m0.000s
sys 0m0.000s
これは良い実行時間です。
私はこの醜いラインを美しく飾った。
time find /opt/platforms/ -name '*trading*cfg' -exec grep SenderCompID {} \; | awk -F= '{print $2}'
real 0m0.076s
user 0m0.004s
sys 0m0.008s
チューブ一つ減って書いてみましたがそれでもfind -exec
時間が少しかかりましたね。
私はさらに一歩進み、パイプなしでfindを使用しました。
time find /opt/platforms/ -name '*trading*cfg' -exec sed -n '/SenderCompID/s/.*=\(.*\)/\1/p' {} \;
real 0m0.076s
user 0m0.008s
sys 0m0.012s
「悪い」結果。
インストールされたネットワークデバイスにあると仮定すると、この時間は10倍になる可能性があり、小さな違いはかなり大きくなります。
一見すると、より効率的に見えるコマンドが実行するのに最も長い時間がかかる理由を説明できる人はいますか?ありがとう
答え1
あなたの「美化」のために実行時間が悪くなります。プログラムは複数のファイルをxargs
呼び出し、各ファイルは同時に呼び出されます(交換されたことを確認できます)。各呼び出し中に複数のファイルを処理できる場合は、呼び出しの数が減ります(開始は必要なく、呼び出しのオーバーヘッドはありません)。代わりに呼び出す場合も同様です。grep
-exec
grep
grep
echo
grep
sed
grep