अगर मेरे पास यूजी पर एक .gz फाइल है जिसमें कुछ निश्चित पंक्तियां हैं। मैं बिना किसी को बताए यूनिक्स पर लाइनों को कैसे गिन सकता हूं।
अगर मेरे पास यूजी पर एक .gz फाइल है जिसमें कुछ निश्चित पंक्तियां हैं। मैं बिना किसी को बताए यूनिक्स पर लाइनों को कैसे गिन सकता हूं।
जवाबों:
यदि फ़ाइल अभी भी संपीड़ित है, तो आप स्पष्ट रूप से नई गणना नहीं कर सकते।
लेकिन आप एक स्ट्रीम को डिकम्प्रेस कर सकते हैं, और उस स्ट्रीम में न्यूलाइन्स को गिन सकते हैं, बिना डिस्क को कभी भी विघटित (डिकम्प्रेस्ड) फाइल लिखे बिना। ऐसा कुछ होगा:
zcat file.gz | wc -l
Zomat के लिए decompress & cat, wc के लिए wordcount। यदि आप अधिक जानना चाहते हैं तो दोनों के लिए मैन पेज देखें।
संपादित करें
यदि आपके पास zcat नहीं है, तो zcat केवल एक और नाम है gunzip -c
।
gzip
से अलग है compress
, आप चाहते हैं gzcat
।
यह भी काम करने लगता है - फ़ाइल में लाइन-एंडिंग की संख्या के लिए grep
zgrep -Ec "$" file.gz
wc -l
यदि आप इसे जल्दी से करना चाहते हैं, तो मैं 'पिगज़' का उपयोग करने की सलाह देता हूं (जो IIRC "GZip के समानांतर कार्यान्वयन" के लिए है)। मेरे पास एक ऐसी ही स्थिति थी जहां मैं गज़िप की फाइलों के एक समूह में लाइनों की संख्या गिनना चाहता था और यहां मेरा समाधान था:
for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done
जिसने मुझे 8 प्रोसेसर का उपयोग करके लाइनों की संख्या और वैकल्पिक लाइनों पर गिने जाने वाली फ़ाइल दी। यह जल्दी से चला गया!
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
इस कमांड का उपयोग करें:
gzgrep -c $ filename.gz
आदेश gzgrep
वही व्यवहार करता है grep
लेकिन gzip संपीड़ित फ़ाइलों पर। यह रेगेक्स मिलान के लिए फ़्लाई पर फ़ाइल को डिकम्प्रेस करता है।
इस मामले -c
में कमांड को मेल की गई लाइनों की आउटपुट संख्या और रेगेक्स $
लाइन के अंत से मेल खाने का निर्देश देती है, इसलिए यह हर लाइन या फाइल से मेल खाती है।
अंतिम परिणाम के समान है gzip -dc filename.gz | grep -c $
।
gzgrep
सोलारिस के अलावा अन्य प्रणालियों पर उपलब्ध है?
यदि आप एक सटीक गणना के बजाय एक मोटे अनुमान के साथ ठीक हैं, और वास्तव में पूरी फाइल निकाल रहे हैं या लाइन एंडिंग के लिए इसे zgrepping करते हैं, तो दोनों को बहुत अधिक समय लगेगा (जो अभी मेरी स्थिति थी), आप कर सकते हैं:
zcat "$file" | head -1000 > 1000-line-sample.txt
ls -ls 1000-line-sample.txt "$file"
तब तक अनुमानित लाइन काउंट होता है 1000 * (size of $file) / (size of 1000-line-sample)
, जब तक कि आपका डेटा प्रति लाइन काफी सजातीय हो।