मैं यह देखकर बहुत हैरान था कि जब आप --ignore-case
विकल्प grep
पर जोड़ते हैं तो यह 50x बार खोज को धीमा कर सकता है। मैंने इसे दो अलग-अलग मशीनों पर एक ही परिणाम के साथ परीक्षण किया है। मैं विशाल प्रदर्शन अंतर के लिए एक स्पष्टीकरण खोजने के लिए उत्सुक हूँ।"grep --ignore-case" 50 गुना धीमा क्यों है?
मैं केस-असंवेदनशील खोजों के लिए grep को वैकल्पिक आदेश भी देखना चाहूंगा। मुझे नियमित अभिव्यक्तियों की आवश्यकता नहीं है, बस निश्चित स्ट्रिंग खोज। पहले परीक्षण फ़ाइल एक 50 एमबी कुछ डमी डेटा के साथ सादा पाठ फ़ाइल हो जाएगा, तो आप इसे उत्पन्न करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:
test.txt
yes all work and no play makes Jack a dull boy | head -c 50M > test.txt
echo "Jack is no fun" >> test.txt
echo "Jack is no Fun" >> test.txt
प्रदर्शन बनाएं
नीचे धीमापन का प्रदर्शन है। --ignore-case
विकल्प जोड़कर आदेश 57x गुना धीमा हो जाता है।
$ time grep fun test.txt
all work and no plJack is no fun
real 0m0.061s
$ time grep --ignore-case fun test.txt
all work and no plJack is no fun
Jack is no Fun
real 0m3.498s
संभव स्पष्टीकरण
चारों ओर Googling मैं एक UTF-8 स्थान में धीमी गति से किया जा रहा है ग्रेप पर एक चर्चा पाया। तो मैंने निम्नलिखित परीक्षण चलाया, और यह तेज हो गया। मेरी मशीन पर डिफ़ॉल्ट लोकेल en_US.UTF-8
है, इसलिए इसे POSIX
पर सेट करने के लिए एक प्रदर्शन बूट किया गया प्रतीत होता है, लेकिन अब निश्चित रूप से मैं यूनिकोड टेक्स्ट पर सही ढंग से खोज नहीं कर सकता जो अवांछित है। यह अभी भी 2.5 गुना धीमा है।
$ time LANG=POSIX grep --ignore-case fun test.txt
all work and no plJack is no fun
Jack is no Fun
real 0m0.142s
वैकल्पिक
हम पर्ल इस्तेमाल कर सकते हैं बजाय यह तेजी से अभी भी 5.5 गुना तेजी से तो केस संवेदी ग्रेप है, लेकिन। और उपरोक्त POSIX grep लगभग दोगुना तेज़ है।
$ time perl -ne '/fun/i && print' test.txt
all work and no plJack is no fun
Jack is no Fun
real 0m0.388s
तो मैं अगर कोई एक है एक तेजी से सही विकल्प और व्याख्या पढ़ सकते हैं अच्छा लगेगा।
अद्यतन - CentOS
दो मशीनों है कि दोनों के ऊपर परीक्षण किया गया उबंटू एक 11.04 (Natty Narwhal), अन्य 12.04 (सटीक छिपकली) चल रहे थे। CentOS 5.3 मशीन पर एक ही परीक्षण चलाने से निम्नलिखित दिलचस्प परिणाम मिलते हैं। दो मामलों के प्रदर्शन के परिणाम लगभग समान हैं। अब सेंटोस 5.3 जनवरी 200 9 में जारी किया गया था, एक grep 2.5.1 चला रहा है जबकि उबंटू 12.04 grep 2.10 चला रहा है। तो नए संस्करण में बदलाव और दो वितरण में मतभेद हो सकते हैं।
$ time grep fun test.txt
Jack is no fun
real 0m0.026s
$ time grep --ignore-case fun test.txt
Jack is no fun
Jack is no Fun
real 0m0.027s
आप एक सारांश प्रदान कर सकते हैं? –