बड़ी लॉग फ़ाइलों के साथ तेज़ी से प्राप्त करने के लिए कम कैसे प्राप्त करें?


15

मैं अक्सर अविश्वसनीय बड़े लॉग फ़ाइलों (> 3 जीबी) के साथ काम कर रहा हूं। मैंने देखा है कि इन फ़ाइलों के साथ कम का प्रदर्शन भयानक है। अक्सर मैं फाइल के बीच में कूदना चाहता हूं, लेकिन जब मैं आगे कूदने के लिए कम कहता हूं 15 M लाइनें मिनट लगती हैं ..

मुझे लगता है कि समस्या यह है कि '\ n' वर्णों के लिए फ़ाइल को स्कैन करने की आवश्यकता कम है, लेकिन इसमें बहुत लंबा समय लगता है।

वहाँ एक रास्ता बनाने के लिए यह सिर्फ एक स्पष्ट ऑफसेट की तलाश है? उदाहरण के लिए, फ़ाइल में 1.5 बिलियन की बाइट करना चाहते हैं। इस ऑपरेशन को तेजी से परिमाण के आदेश होने चाहिए। यदि कम ऐसी क्षमता प्रदान नहीं करता है, तो क्या कोई अन्य उपकरण है जो करता है?


यदि आप निषिद्ध वर्णों के लिए फ़ाइल को स्किम कर रहे हैं, तो क्या यह उचित धारणा है कि आप पूर्वोक्त वर्णों को खोजने के बाद उन्हें शुद्ध कर देंगे? यदि हां, तो मैं पेश कर सकता हूंperl -pi -e 's/\n//g;' <filename>
माइक पेनिंगटन

क्षमा करें, स्किम गलत शब्द था। स्कैन का इस्तेमाल करना चाहिए था। न्यूलाइन (\ n) के लिए डिज़ाइन स्कैन द्वारा कम। बड़ी फ़ाइलों पर इस स्कैनिंग में बहुत लंबा समय लगता है।
UsAaR33

जवाबों:


21

आप इस तरह से लाइनों को कम करने से रोक सकते हैं less -n

किसी विशिष्ट स्थान पर कूदने के लिए, जैसे कि 50% कहते हैं, less -n +50p /some/logयह मेरे लिए 1.5GB लॉग फ़ाइल पर त्वरित था।

संपादित करें: एक विशिष्ट बाइट ऑफसेट के लिए: less -n +500000000P ./blah.log


1
लाइन काउंटिंग कभी मुद्दा नहीं था; मैं बस उस के लिए escp / ctrl-c का उपयोग कर सकता हूं। लेकिन यह वास्तविक उत्तर है; पी एक विशिष्ट बाइट ऑफसेट के लिए कूदता है!
UsAaR33

5

कम, एक पेजर होने के नाते, स्वाभाविक रूप से लाइन-ओरिएंटेड है। जब आप स्टार्टअप करते हैं, अगर यह एक बड़ी फाइल है तो यह "काउंटिंग लाइन नंबर" कहेगा और आपने ईएससी को रोकने के लिए मारा, लेकिन अन्यथा, यह लाइनें करता है। यह क्या करता है।

यदि आप फ़ाइल के बीच में सीधे कूदना और शुरुआत को छोड़ना चाहते हैं, तो आप हमेशा शुरुआत के अतीत की तलाश कर सकते हैं; मैं कुछ करूँगा tail -c +15000000 /some/log | less


3
आप या तो मतलब है tail -c ...या आप एक अजीब lastआदेश है।
एलन करी

इस रणनीति के साथ समस्या यह है कि आप कम से कम (विशिष्ट संदेश आदि की खोज) से पूरी फाइल में नहीं देख सकते
Sekenre

@AlanCurry: यह सिर्फ एक वैकल्पिक वर्तनी है ... <grin>
womble

0

less लगता है कि लोकेल सेटिंग से एक छोटा ओवरहेड है

यदि आप ASCII केवल वर्णों का उपयोग कर रहे हैं, तो आप इसका उपयोग करके इसे थोड़ा बढ़ा सकते हैं:

LC_ALL=C less big-log-file.log

मेरे मामले में, थ्रूपुट ~ 30M ib / s से बढ़ाकर ~ 50 Mib / s (दर सीपीयू बाध्य है)

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