1GB की तरह एक बहुत बड़ी फ़ाइल के wc -l
लिए धीमी गति से होता है। क्या हमारे पास किसी विशेष फ़ाइल के लिए नई संख्या की गणना करने का एक तेज़ तरीका है?
wc
बहुत अधिक ओवरहेड होने का संदेह है तो आप अपने स्वयं के कार्यान्वयन की कोशिश कर सकते हैं foreach byte in file: if byte == '\n': linecount++
। यदि C या असेंबलर में लागू किया जाता है, तो मुझे नहीं लगता कि यह किसी भी तेजी से मिलेगा, शायद RTOS पर कर्नेल स्पेस में सर्वोच्च प्राथमिकता के साथ (या इसके लिए एक रुकावट का उपयोग करें - आप सिस्टम के साथ और कुछ नहीं कर सकते। .. सब ठीक है, मैं पछतावा ;-))
time wc -l some_movie.avi
एक अनकैप्ड फ़ाइल पर एक त्वरित किया, जिसके परिणामस्वरूप 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
। जो मूल रूप से @thrig सही साबित होता है, मैं / O इस मामले में आपके प्रदर्शन को तोड़ देता है।
time wc -l some_large_file_smaller_than_cache
दो बार त्वरित उत्तराधिकार में करें और देखें कि दूसरा ऑपरेशन कितना तेज़ है, फिर time wc -l some_large_file_larger_than_cache
देखें और देखें कि रन के बीच समय कैसे नहीं बदलता है। यहां ~ 280MB फ़ाइल के लिए, समय 1.7 सेकंड से 0.2 सेकंड तक चला जाता है, लेकिन 2GB फ़ाइल के लिए यह दोनों समय 14 सेकंड है।
/usr/bin/time wc -l <file>
कहता है? आपका हार्डवेयर क्या है? यदि आप बार-बार कमांड चलाते हैं तो क्या यह तेज है? हमें वास्तव में अधिक जानकारी की आवश्यकता है;)
0x0A
निराकरण के लिए किया जाना चाहिए , आई / ओ नि: संदेह अड़चन है।