बस का उपयोग करने के यदि यह एक निश्चित रिकार्ड लंबाई फ़ाइल नहीं है और आप लाइन पर अनुक्रमण के कुछ प्रकार नहीं करते शुरू होता है, आपका सर्वश्रेष्ठ दांव है:
head -n N filespec | tail -1
जहां N
लाइन नंबर है तुम्हें चाहिए।
यह एक 3 जीबी फ़ाइल दुर्भाग्य के लिए कोड का सबसे अच्छा प्रदर्शन टुकड़ा होने के लिए नहीं जा रहा है लेकिन वहाँ इसे बेहतर बनाने के तरीके हैं।
यदि फ़ाइल बहुत बार नहीं बदलती है, तो आप इसे अनुक्रमणित करने पर विचार करना चाहेंगे। इसके द्वारा मेरा मतलब है कि अन्य फ़ाइल में लाइन ऑफसेट्स के साथ निश्चित लंबाई रिकॉर्ड के रूप में फ़ाइल है।
तो फ़ाइल:
0000000000
0000000017
0000000092
0000001023
आप प्रत्येक पंक्ति का पता लगाने के लिए एक तेजी से रास्ता देना होगा। बस वांछित लाइन नंबर को इंडेक्स रिकॉर्ड आकार से गुणा करें और इंडेक्स फ़ाइल में वहां खोजें।
तब मुख्य फ़ाइल में तलाश करने के लिए ताकि आप अगले न्यू लाइन चरित्र जब तक पढ़ सकते हैं उस स्थान पर मूल्य का उपयोग करें।
तो लाइन 3 के लिए, आप अनुक्रमणिका फ़ाइल में 33 करने की कोशिश करेगी (सूचकांक रिकॉर्ड लंबाई 10 वर्णों से अधिक न्यू लाइन के लिए एक और है)। वहां मूल्य को पढ़ना, 0000000092
, आपको मुख्य फ़ाइल में उपयोग करने के लिए ऑफ़सेट देगा।
बेशक
, कि अगर फ़ाइल में परिवर्तन अक्सर, हालांकि आप नियंत्रित कर सकते हैं, तो क्या होता है जब चीजें संलग्न हो, आप अभी भी ऑफसेट सूचकांक को कुशलता से जोड़ सकते हैं ताकि उपयोगी नहीं है। यदि आप पर नियंत्रण नहीं करते हैं, तो आपको सूचकांक की अंतिम-संशोधित दिनांक मुख्य फ़ाइल की तुलना में पहले होने पर पुन: अनुक्रमणिका करना होगा।
और, अपने अद्यतन के आधार पर:
अद्यतन: यदि यह मायने रखती है, सभी लाइनें एक ही लंबाई की है।
जानकारी के उस अतिरिक्त टुकड़ा के साथ
, आप सूचकांक जरूरत नहीं है - रिकॉर्ड लंबाई द्वारा रिकॉर्ड लंबाई गुणा (यह मानते हुए मूल्यों में फिट से तुम सिर्फ मुख्य फ़ाइल में सही स्थान पर तुरंत प्राप्त कर सकते हैं अपने जानकारी का प्रकार)।
तो छद्म कोड की तरह कुछ:
def getline(fhandle,reclen,recnum):
seek to position reclen*recnum for file fhandle.
read reclen characters into buffer.
return buffer.
+1। मूल रूप से अतिरिक्त बाद के रिकॉर्ड-आकार स्निपेट के बाद मेरे बाद के समाधान के समान ही प्रश्न में जोड़ा गया था, लेकिन इसका अपना अलग-अलग लाभ है कि आप अपना खुद का प्रोग्राम लिखने की आवश्यकता न लें। – paxdiablo
यह इतना बेवकूफ है। हे। डीडी, मुझे यह पसंद है। – JavaRocky