2012-03-28 16 views
10

एक बड़ी फ़ाइल की लाइन गिनती कैसे प्राप्त करें, कम से कम 5 जी की एक बड़ी फ़ाइल की लाइन गिनती कैसे प्राप्त करें। खोल का उपयोग कर सबसे तेज़ दृष्टिकोण।कम से कम 5 जी

+4

'wc -l' के साथ क्या गलत है? –

+2

समस्या बहुत धीमी है ... –

+1

http://www.codinghorror.com/blog/2007/09/everything-is-fast-for-small-n.html –

उत्तर

13

चरण 1: head -n filename> newfile // पहली एन लाइनों को नई फ़ाइल में प्राप्त करें, उदाहरण के लिए। एन = 5

चरण 2: विशाल फ़ाइल आकार जाओ, एक

चरण 3: newfile आकार, बी जाओ

चरण 4: (ए/बी) * n सटीक के लगभग बराबर है लाइन गिनती

अलग-अलग मान होने के लिए सेट करें, कुछ बार और अधिक करें, फिर औसत प्राप्त करें।

+0

अच्छा विचार, धन्यवाद। –

+0

यह आपको फ़ाइल में लाइनों की संख्या का * अनुमान * देता है। आप किसी भी तरह से पूरी फाइल को पढ़ने के बिना सटीक गिनती नहीं प्राप्त कर सकते हैं। अनुमान पहले से हो सकता है अगर पहली ** एन ** लाइनें औसत से अधिक या कम हो जाती हैं। और ** एन ** के अलग-अलग मूल्यों के परिणामों के औसत का औसत अजीब लगता है। सबसे बड़ा ** एन ** आप कोशिश करेंगे सभी छोटे मूल्यों के परिणाम शामिल होंगे। बस कुछ बड़े ** एन ** के लिए एक माप करना सुझाए गए औसत दृष्टिकोण से बेहतर होने की संभावना है। किसी भी मामले में, मेरे उत्तर पर टिप्पणियां इंगित करती हैं कि 'wc -l' में लगभग 9 0 सेकंड लगते हैं। –

8

सबसे तेज़ दृष्टिकोण wc -l होने की संभावना है।

wc कमांड इस तरह की चीज करने के लिए अनुकूलित किया गया है। यह बहुत ही असंभव है कि आप और कुछ भी कर सकते हैं (इसे अधिक शक्तिशाली हार्डवेयर पर करने के अलावा) किसी भी तेजी से होने जा रहा है।

हां, 5 गीगाबाइट टेक्स्ट फ़ाइल में लाइनों की गिनती धीमी है। यह एक बड़ी फाइल है।

एकमात्र विकल्प डेटा को पहले स्थान पर किसी भिन्न प्रारूप में संग्रहीत करना होगा, शायद एक डेटाबेस, शायद निश्चित लंबाई वाले रिकॉर्ड वाली फ़ाइल। अपने 5 गीगाबाइट टेक्स्ट फ़ाइल को किसी अन्य प्रारूप में कनवर्ट करने के लिए कम से कम पर wc -l चलाने के रूप में गलत होने जा रहा है, लेकिन यदि आप लाइनों की गिनती करने जा रहे हैं तो इसके लायक हो। यह कहना असंभव है कि ट्रेडऑफ अधिक जानकारी के बिना क्या हैं।

+0

सादे पाठ फ़ाइल के उस आकार के लिए, 'wc' ने उस फ़ाइल के लिए पहली कॉल पर अपेक्षाकृत कम समय लिया, और बाद में कॉल के लिए ~ 2 सेकंड इनपुट के समान फ़ाइल के साथ। –

+0

पहली बार फ़ाइल का कैशिंग इसे समझाता है, यहां @ इवेला द्वारा टिप्पणी देखें: http://stackoverflow.com/a/12716620/1959808 –

+0

@johntex: "अपेक्षाकृत कम समय" से आपका क्या मतलब है? –

संबंधित मुद्दे