2012-11-08 15 views
14

के साथ जीएनयू समय का उपयोग कैसे करें मैं postgresql में कुछ SQL क्वेरी के चलने का समय मापना चाहता हूं। अंतर्निहित समय का उपयोग करके, मैं निम्नलिखित कर सकता था:पाइपलाइन

$ time (echo "SELECT * FROM sometable" | psql) 

मुझे जीएनयू समय पसंद है, जो अधिक प्रारूप प्रदान करता है। हालांकि मुझे नहीं पता कि पाइप लाइन के साथ इसे कैसे किया जाए। सादगी के लिए, मैं निम्नलिखित उदाहरण में ls | wc का उपयोग करें:

$ /usr/bin/time -f "%es" (ls | wc)              
-bash: syntax error near unexpected token `(' 

$ /usr/bin/time -f "%es" "ls | wc"             
/usr/bin/time: cannot run ls | wc: No such file or directory 

मैं किसी भी तरह से पाइप समूह नहीं करते हैं, यह शिकायत नहीं करता है:

$ /usr/bin/time -f "%es" ls | wc  
0.00s 

लेकिन जाहिरा तौर पर, यह केवल पहले भाग को मापने पाइप के अगले उदाहरण

$ /usr/bin/time -f "%es" ls | sleep 20             
0.00s 

तो सवाल यह पाइप लाइन के साथ जीएनयू समय के लिए सही सिंटैक्स है क्या है में दिखाई दे रहा है?

उत्तर

11

कॉल time से खोल:

/usr/bin/time -f "%es" bash -c "ls | wc" 
बेशक

, इस खोल शुरू हुआ समय के साथ-साथ शामिल होंगे; यह बहुत अधिक नहीं होना चाहिए, लेकिन यदि आप एक ऐसे सिस्टम पर हैं जिसमें dash (और यह आवश्यक है कि आप जो भी चाहते हैं) करने के लिए पर्याप्त है, तो आप स्टार्ट-अप टाइम ओवरहेड को कम करने के लिए इसका उपयोग कर सकते हैं:

/usr/bin/time -f "%es" dash -c "ls | wc" 

एक और विकल्प केवल उस समय के लिए होगा जब आप वास्तव में रुचि रखते हैं, जो psql कमांड है। time कार्यक्रम क्रियान्वित किया जा रहा करने के लिए अपने मानक इनपुट पारित करेंगे, तो आप उस पर पाइप लाइन का सिर्फ एक घटक चला सकते हैं:

echo "SELECT * FROM sometable" | /usr/bin/time -f "%es" psql 
+0

अंतिम समाधान मेरी समस्या के लिए बिल्कुल सही है। अन्य अधिक लचीला हैं। धन्यवाद! – stderr

3

एक स्क्रिप्ट है कि अपने पाइप लाइन कॉल बनाएँ। फिर

/usr/bin/time -f '%es' script.sh 
संबंधित मुद्दे