लिनक्स पर एक बड़ी फ़ाइल पर त्वरित पूंछ


3

मुझे 100 मिलियन लाइनों की अंतिम 10 मिलियन लाइनों की फ़ाइल प्राप्त करने की आवश्यकता है।

पूंछ -n 10000000 $ in_file> $ out_file

हालाँकि उपरोक्त आदेश को 1 दिन से अधिक समय हो गया है और अभी भी चल रहा है। मुझे लगता है कि मैं इस प्रक्रिया के लिए अधिक प्राथमिकता प्रदान करने के लिए अच्छी कमांड का उपयोग कर सकता हूं, लेकिन मैं जानना चाहता हूं कि क्या मौलिक रूप से बेहतर तरीका है।


हार्ड डिस्क या एसएसडी?
मोटो

100 मिलियन लाइनें काफी बड़ी फ़ाइल है, नाह? क्या आपके पास पहले फ़ाइल को कुछ जोड़े शार्प में विभाजित नहीं किया जा सकता है? यह निश्चित रूप से EOLखोज को कम करेगा , इस प्रकार आपको कुछ गति प्रदान करेगा। एक SSD भी एक महान - विस्तारवादी शॉट होगा: (:
Rubens

कितनी लंबी, मोटे तौर पर, प्रत्येक पंक्ति (या बाइट्स में फ़ाइल कितनी बड़ी है)? क्या रेखाएं आकार में समान रूप से समान हैं, या चिंता करने के लिए छोटे और लंबे वाले हैं? यदि मानक उपकरण समय पर काम नहीं करेगा, तो आपको संभवतः अपना खुद का लिखना होगा। यह अतिशयोक्तिपूर्ण है कि आपको संभवतः फ़ाइल के टेल एंड को कम से कम दो बार स्कैन करने की आवश्यकता होगी, लेकिन संभवतः अपरिहार्य है।
जोनाथन लेफ़लर

जवाबों:


3

फ़ाइल को कुछ छोटी फ़ाइलों में विभाजित करने के अलावा, आप बस फ़ाइल को खोल सकते हैं और इसे किसी ऐसी चीज़ की तलाश कर सकते हैं जिसे आप फ़ाइल के अंत के करीब समझ सकते हैं ।

उसके बाद, आप के रूप में वहाँ आ सकता है के रूप में ज्यादा लाइनों पढ़ा है, और, यदि आप तक पहुँचने के EOFअपने 10000000 वांछित लाइनों के सभी के बिना, आप सिर्फ एक बनाने की जरूरत है diff पहले की स्थिति से अनुमान लगाया , और एक नया - पूर्व - स्थान, और n = भिन्न पंक्तियों को पढ़ने का प्रयास करें ।

मैं वास्तव में नहीं जानता कि tailक्या ऐसा होता है, या यदि कोई उपलब्ध POSIX टूल है जो इस तरह का ऑपरेशन करता है; इसे लागू करने में पाँच मिनट से अधिक नहीं लगने चाहिए, मुझे लगता है (: यह कुछ मदद का हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.