grep
आमतौर पर जितना तेज़ हो जाता है उतना तेज़ होता है। यह केवल एक चीज और एक चीज के लिए डिज़ाइन किया गया है - और यह वही करता है जो यह बहुत अच्छा करता है। आप पढ़ सकते हैं क्यों here।
हालांकि, चीजों को गति देने के लिए आप कुछ कोशिश कर सकते हैं। सबसे पहले, ऐसा लगता है कि आप जिस पैटर्न को खोज रहे हैं वह एक निश्चित स्ट्रिंग है। सौभाग्य से, grep
एक 'निश्चित तार' का विकल्प है:,
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)
दूसरे क्योंकि grep
आम तौर पर बहुत UTF-8
पर धीमी है, आप पर्यावरण LANG=C
की स्थापना द्वारा राष्ट्रीय भाषा समर्थन (NLS) अक्षम करने का प्रयास कर सकता है।
LANG=C grep -F "2005057488" file
तीसरा, यह अपने प्रश्न में स्पष्ट नहीं था, लेकिन अगर अपने ही अगर कुछ आपकी फ़ाइल में एक बार मौजूद है खोजने की कोशिश कर, आप भी की अधिकतम संख्या को जोड़ने की कोशिश कर सकते: इसलिए, आप इस मिश्रण की कोशिश कर सकते पैटर्न खोजने के लिए समय। इसलिए, जब पहली घटना मिलने के बाद -m 1
, grep
तत्काल छोड़ दिया जाएगा। आपका आदेश अब ऐसा दिखाई दे सकता:
LANG=C grep -m 1 -F "2005057488" file
अंत में, यदि आप एक मल्टीकोर सीपीयू है, तो आप GNU parallel एक जाना दे सकता है। यह explanation of how to use it with grep के साथ आता है। समानांतर उपयोग --pipe
में एक बड़ी फ़ाइल
find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {}
grep
करने के लिए:: grep
के प्रति कोर 1.5 नौकरियों को चलाने के लिए और दे 1000 तर्क
< bigfile parallel --pipe grep STRING
अपने डिस्क और सीपीयू पर निर्भर करता है यह बड़ा पढ़ने के लिए तेजी से हो सकता है ब्लॉक:
< bigfile parallel --pipe --block 10M grep STRING
यह संभावना नहीं है में उस विशेष स्ट्रिंग प्राप्त करने के लिए काम करता है। 'grep' को केवल एक चीज करने के लिए डिज़ाइन किया गया है (मेरा उत्तर देखें) – Steve
@steve, क्या मुझे अपना जवाब तब हटा देना चाहिए? एसओ के लिए नया कृपया मदद करे। जीएनयू समांतर – Anon