कैसे .GZ संपीड़ित फ़ाइल से कुछ पंक्तियाँ प्राप्त करने के लिए


89

Gziped फ़ाइल से पहली कुछ पंक्तियाँ कैसे प्राप्त करें? मैंने zcat की कोशिश की, लेकिन इसकी एक त्रुटि है

zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.

जवाबों:


149

zcat(1)compress(1)या तो द्वारा आपूर्ति की जा सकती है gzip(1)। आपके सिस्टम पर, ऐसा प्रतीत होता है compress(1)- यह .Zएक्सटेंशन वाली फ़ाइल की तलाश में है ।

के gzip -cdस्थान पर स्विच करें zcatऔर आपकी कमांड ठीक काम करे:

 gzip -cd CONN.20111109.0057.gz | head

व्याख्या

   -c --stdout --to-stdout
          Write output on standard output; keep original files unchanged.  If there are several input files, the output consists of a sequence of independently compressed members. To obtain better compression, concatenate all input files before compressing
          them.

   -d --decompress --uncompress
          Decompress.

7
BTW, अगर आप एक * .tar.gz के साथ बैठे हैं, तो इससे आपको मदद मिलेगी: tar -xzOf some_huge_file.tar.gz | head
demaniak

पुराना धागा लेकिन यह बड़ी gz फाइलों के साथ निकास स्थिति 1 के साथ एक टूटी हुई पाइप का उत्पादन करता है। कोई साफ सफाई?
कलिग्न

2
अब तक का सबसे अच्छा और सबसे आसान वर्कअराउंड: उपयोग zless file.gz | headzmoreअभी भी आपको टूटी पाइप के साथ छोड़ देता है। zlessजाने का रास्ता मालूम पड़ता है।
कलिग्न

जब तक बाहर नहीं निकलता ... कम से कम मेरी बड़ी फ़ाइल पर नहीं। मैं अभी भी एक तरह से टूटी हुई पाइप त्रुटियों के बिना ऐसा करने की तलाश कर रहा हूं ...
फ्रीक


11

एक मैक पर आपको <zcat का उपयोग करने की आवश्यकता है :

zcat < CONN.20111109.0057.gz|head


2

यदि लाइनों की एक सतत श्रेणी की आवश्यकता होती है, तो एक विकल्प हो सकता है:

gunzip -c file.gz | sed -n '5,10p;11q' > subFile

जहां 5 वीं और 10 वीं लाइनों (दोनों समावेशी) के बीच की लाइनों file.gzको एक नए में निकाला जाता है subFile। के लिए sedविकल्प, का उल्लेख मैनुअल

यदि प्रत्येक, कहे, 5 वीं पंक्ति आवश्यक है:

gunzip -c file.gz | sed -n '1~5p;6q' > subFile

जो 1 लाइन निकालता है और 4 लाइनों पर कूदता है और 5 वीं लाइन और इसी तरह से चुनता है।


0

यह जाग स्निपेट आपको न केवल पहली कुछ पंक्तियाँ दिखाएगा - बल्कि एक सीमा जिसे आप निर्दिष्ट कर सकते हैं। इसमें लाइन नंबर भी जोड़ा जाएगा, जो मुझे एक त्रुटि संदेश को डीबग करने के लिए आवश्यक है जो एक gzipped फ़ाइल में नीचे एक निश्चित लाइन तरीके की ओर इशारा करता है।

gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'

यहाँ ऊपर दिए गए एक लाइनर में इस्तेमाल किया गया awk स्निपेट है। Awk में NR एक बिल्ट-इन वैरिएबल (अब तक पाए गए रिकॉर्ड की संख्या) है, जो आमतौर पर एक लाइन नंबर के बराबर होता है। से और चर को कमांड लाइन से -v विकल्पों के माध्यम से उठाया जाता है।

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.