2009-07-25 10 views
35

मैं gzcat की कार्यक्षमता अनुकरण करना चाहता हूं। पूंछ-एनमैं अपनी पूरी सामग्री को पढ़ने के बिना एक ज़िप फ़ाइल कैसे पूंछ सकता हूं?

यह उन समय के लिए उपयोगी होगा जब बड़ी फाइलें होंगी (कुछ जीबी या तो)। क्या मैं इस तरह की फाइल की आखिरी कुछ पंक्तियों को शुरुआती से पढ़ सकता हूं? मुझे संदेह है कि यह संभव नहीं होगा क्योंकि मैं gzip के लिए अनुमान लगाऊंगा, एन्कोडिंग सभी पिछले पाठ पर निर्भर करेगा।

लेकिन फिर भी मैं यह सुनना चाहता हूं कि किसी ने कुछ ऐसा करने की कोशिश की है - शायद एक संपीड़न एल्गोरिदम पर जांच कर रहा है जो ऐसी सुविधा प्रदान कर सकता है।

+0

gzip टेक्स्टुअल लेकिन बाइनरी नहीं है। तो पाठ्य डेटा में कोई "रेखाएं" जैसी नहीं हैं जो 'पूंछ' वापस आ सकती हैं। – Gumbo

+0

आप [SO] पर एक समान प्रश्न [http://stackoverflow.com/questions/14225751/random-access-to-gzipped-files), [zlib FAQ] (http://zlib.net) को देखना चाहते हैं/zlib_faq.html#faq28) और [उदाहरण/zran.c] (https://github.com/madler/zlib/blob/master/examples/zran.c) [zlib] में (http: // zlib। नेट) वितरण। –

उत्तर

36

नहीं, आप नहीं कर सकते। zipping algorithm धाराओं पर काम करता है और इसके आंतरिक कोडिंग को अपनाने के लिए धारा में उच्च संपीड़न अनुपात प्राप्त करने के लिए क्या होता है।

यह जानने के बिना कि स्ट्रीम की सामग्री किसी निश्चित बिंदु से पहले क्या है, यह जानना असंभव है कि उस बिंदु से डी-संपीड़न के बारे में कैसे जाना है।

कोई भी एल्गोरिदम जो आपको इसके मनमानी हिस्सों को डी-संपीड़ित करने की अनुमति देता है, उसे डेटा को संपीड़ित करने के लिए एकाधिक पास की आवश्यकता होगी।

+6

यह केवल आंशिक रूप से सच है, इस पर निर्भर करता है कि फ़ाइल कैसे बनाई गई थी। gzip फ़ाइलों में कई धाराएं हो सकती हैं, बाद वाला व्यक्ति पूरी तरह से पूर्व से स्वतंत्र होता है। आप बस gzip फ़ाइलों को एकसाथ जोड़ सकते हैं, और अभी भी एक वैध gzip फ़ाइल है। मुझे ब्योरा नहीं पता, लेकिन मुझे लगता है कि धारा के आखिरी ऐसे रीसेट के स्थान को ढूंढना संभव है, मान लीजिए कि स्ट्रीम जो कुछ भी लिखा है वह बहुत बार फिर से शुरू होता है। – mc0e

3

यदि आपके पास पहली जगह में फ़ाइल में क्या है, इस पर नियंत्रण है, यदि यह ज़िप फ़ाइल की तरह कुछ है तो आप पूर्व निर्धारित आकार के हिस्सों को संख्यात्मक क्रम में बढ़ने के लिए फ़ाइल नामों के साथ स्टोर कर सकते हैं और फिर अंतिम खंड/फ़ाइल को डिकंप्रेस कर सकते हैं।

+3

यह एक अच्छा समझौता की तरह लगता है। हालांकि, ओपी को पता होना चाहिए कि इससे संपीड़न अनुपात कम हो जाएगा। यदि परीक्षण से पता चलता है कि अनुपात परिवर्तन स्वीकार्य है, तो यह एक अच्छा विचार है। –

+1

आप वास्तव में फ़ाइल के माध्यम से संपीड़न शब्दकोश भाग-मार्ग को रीसेट करके इसे प्राप्त कर सकते हैं, इस प्रकार फ़ाइल को स्वयं को टुकड़ों में विभाजित करने की आवश्यकता को हटा सकते हैं। –

7

बीजीजेडएफ का उपयोग सैमटोल्स द्वारा बनाई गई इंडेक्स जीजीआईपी संपीड़ित बीएएम फाइलों को बनाने के लिए किया जाता है। ये यादृच्छिक रूप से सुलभ हैं।

http://samtools.sourceforge.net/

+1

बिल्कुल। हालांकि, यह सिर्फ सैमटोल्स या बीएएम के लिए नहीं है! मेरा मानना ​​है कि यह किसी भी लाइन-सीमांकित डेटा के लिए काम करेगा। –

+1

बीजीजेडएफ फाइलें विशेष रूप से ब्लॉक आकार को सीमित करके विशेष रूप से निर्मित जीज़िप्स के अंदर यादृच्छिक बाइट ऑफसेट तक पहुंच की अनुमति देती हैं, और उसके बाद प्रत्येक ब्लॉक को बीसी हेडर (जो gzip ignores) में अपनी लंबाई को संग्रहीत करने के लिए डिकंप्रेस किए बिना यादृच्छिक पहुंच की अनुमति देता है। ब्लॉक की ऑफसेट को स्टोर करके और ब्लॉक के भीतर ऑफसेट को स्टोर करके बीएएम स्टोर ऑफ़सेट जैसे टूल्स। लाइन-ओरिएंटेड इंडेक्सिंग प्राप्त करने के लिए आपको अपनी इच्छित लाइन (ओं) से ऑफसेट करने के लिए मानचित्र के साथ एक साथ बाई या टैबिक्स फ़ाइल (हालांकि ये प्रारूप और जीनोम विशिष्ट हैं) की तरह कुछ चाहिए। –

1

यह एक विकल्प है, तो bzip2 इस उद्देश्य के लिए उपयोग करने के लिए एक बेहतर संपीड़न एल्गोरिथ्म हो सकता है।

Bzip2 ब्लॉक संपीड़न योजना का उपयोग करता है। इस प्रकार, यदि आप अपनी फ़ाइल के अंत का एक हिस्सा लेते हैं जो आपको यकीन है कि आखिरी खंड में सभी को शामिल करने के लिए काफी बड़ा है, तो आप इसे bzip2recover के साथ पुनर्प्राप्त कर सकते हैं।

फ़ाइल आकार के समय ब्लॉक आकार चयन योग्य है। असल में यह तब होता है जब आप -1 (या --fast) से -9 (या --best) को संपीड़न विकल्प के रूप में सेट करते हैं, जो 100k से 900k के ब्लॉक आकार से मेल खाते हैं। डिफ़ॉल्ट 900k है।

bzip2 कमांड लाइन टूल्स आपको पाइपलाइन के साथ ऐसा करने का एक अच्छा दोस्ताना तरीका नहीं देते हैं, लेकिन फिर bzip2 स्ट्रीम उन्मुख नहीं है, शायद यह आश्चर्य की बात नहीं है।

1

ज़िन्डेक्स एक समय में एक संपीड़ित, लाइन-आधारित टेक्स्ट फ़ाइल पर एक सूचकांक बनाता है और अंतरिक्ष-कुशल तरीका बनाता है।

https://github.com/mattgodbolt/zindex

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

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