最近、私たちは開発中のデバイスに統合するためにソフトウェアソリューションを購入しました。必要に応じて変更し、適用する必要があります。だから今日、私はいくつかのコードを見て、変更する必要があるものを確認し、いくつかの点について考え始めました。
いくつかのスクリプトを見ている間、目に見えるいくつかの行が見つかりました。たとえば、次のようになります。
cat file | grep ^field | head -n1 | sed 's/:/ /' | awk '{print $1}'
1回の呼び出しですべてを簡単にできる場合、これは少し愚かなようですawk
。おそらく:
awk -F':' '/^field/ {print $1; exit}' file
後で私はこの問題に興味を持ち始め、同様の状況をたくさん見つけました。一部は初期化中に実行されるため、気にしません。一方、他の人は頻繁に呼び出されます。
これは、より少ないリソースで実行できるタスクを実行するためにどこでもスクリプト生成プロセスを持つことができることを意味します。さて、実際に気になり始めました。パイプが多すぎると、どの時点でパフォーマンスが低下し始めますか?特に「管路「選ぶ。
私は実際のPCよりもリソースがはるかに少ないプラットフォームで組み込みLinuxを実行していることに注意してください。質問の目的に応じて、それは重要ではないかもしれません。
ベストアンサー1
時には物事を分析する方が簡単です。
サンプル入力ファイルを作成しました。
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
field:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
シェルスクリプト 'a.sh':
#!/bin/bash
for i in `seq 1 1000`; do
cat test.dat | grep ^field | head -n1 | sed 's/:/ /' | awk '{print $1}' >/dev/null
done
シェルスクリプト 'b.sh':
#!/bin/bash
for i in `seq 1 1000`; do
awk -F':' '/^field/ {print $1; exit}' test.dat >/dev/null
done
はじめに:
time ./a.sh
real 0m10.253s
user 0m5.526s
sys 0m8.668s
time ./b.sh
real 0m3.274s
user 0m1.288s
sys 0m1.783s
(これは私が愛している2008 MacBook、2.4 GHz Intel Core 2 Duoで行われました。)
あなたのバージョンが数倍速いことは明らかです。しかし、これは1000通貨の時間です。このシェルコードが実行される頻度によっては、数ミリ秒しか節約できません。