sıkıştırılmış bir dosyadaki satırları say


Yanıtlar:


60

Dosya hala sıkıştırılmışsa, açıkça yeni satırları sayamazsınız.

Ancak, bir akışın sıkıştırmasını açabilir ve (akış sıkıştırılmış) dosyayı diske yazmadan bu akıştaki yeni satırları sayabilirsiniz. Bu böyle bir şey giderdi:

zcat file.gz | wc -l

Dekupaj ve kedi için zcat, wordcount için wc. Daha fazla bilgi için her ikisinin de man sayfalarına bakın.

DÜZENLE

Eğer zcat yoksa, zcat sadece bir başka isimdir gunzip -c.


7
gzipFarklı olan Unices'de compress, istediğiniz gzcat.
Coneslayer

7

Bu da işe yarıyor - dosyadaki satır sonu sayısını grep

zgrep -Ec "$" file.gz

Bu benim için piping yapmaktan farklı (çok daha yüksek) bir cevap veriyorwc -l
Stop Harming Monica

5

Hızlı bir şekilde yapmak istiyorsanız, 'pigz' (bu, IIRC'nin "GZip'in Paralel Uygulanması" anlamına gelir) kullanılmasını öneririm. Ben sadece benzer bir durum vardı, bir grup gzip'lenmiş dosyadaki satır sayısını saymak istedim ve işte çözümüm:

for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done

Bu da bana 8 işlemci kullanarak satır sayısını ve alternatif hatlarda saydığı dosyayı verdi. Çabucak kaçtı!


1
Veya unpigz kullanılamıyorsa, sadecefor x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Calimo

2

Bu komutu kullanın:

gzgrep -c $ filename.gz

Komut gzip sıkıştırılmış dosyalarda gzgrepolduğu gibi grepfakat aynı şekilde davranır . Regex eşleşmesi için anında dosyayı açar.

Bu durumda -c, komutun eşleşen satır sayısını göstermesini isteyin ve regex $satırın sonuna eşleşir, böylece her satır veya dosyayla eşleşir.

Nihai sonuç aynıdır gzip -dc filename.gz | grep -c $.


gzgrepSolaris dışındaki sistemlerde kullanılabilir?
pabouk

1
Hayır. Diğer sistemlerde, komut zgrep -c $ dosyaadı.gz olacaktır
Ravi KM

1
Her ne kadar sezgisel olarak bunun zcat + wc'den daha iyi olduğunu düşünebilsem de, onlara zaman ayırdığımda, aynı süreyi alırlar.
ngọcminh.oss

1

Kesin bir sayımdan ziyade kaba bir tahminde bulunmanız yeterliyse ve aslında tüm dosyayı ayıklamak veya satır sonları için zgrepable yapmak hem çok uzun sürecektir (şu anda benim durumumdu):

zcat "$file" | head -1000 > 1000-line-sample.txt
ls -ls 1000-line-sample.txt "$file"

bu durumda, yaklaşık satır sayısı, 1000 * (size of $file) / (size of 1000-line-sample)verileriniz satır başına oldukça homojen olduğu sürece olur.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.