.Gz sıkıştırılmış dosyadan sıkıştırmayı açmadan birkaç satır elde etme


90

Bir gzip dosyasından ilk birkaç satırı nasıl elde edebilirim? Zcat'i denedim ama bir hata veriyor

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

Yanıtlar:


151

zcat(1)tarafından compress(1)veya tarafından sağlanabilir gzip(1). Sisteminizde, uzantıya compress(1)sahip bir dosya arıyor gibi görünüyor .Z.

gzip -cdYerine geçin zcatve komutunuz iyi çalışacaktır:

 gzip -cd CONN.20111109.0057.gz | head

Açıklama

   -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, bir * .tar.gz ile oturuyorsanız, bu size yardımcı olacaktır: tar -xzOf some_huge_file.tar.gz | head
demaniak

Eski iş parçacığı ancak bu, büyük gz dosyalarıyla çıkış durumu 1 olan bozuk bir boru üretir. Temiz bir çözüm var mı?
kaligne

2
Şimdiye kadar bulduğum en iyi ve en kolay çözüm: kullanın zless file.gz | head. zmoreHala seni kırık boruyla bırakıyor. zlessgidilecek yol gibi görünüyor.
kaligne

zless çıkmıyor ... en azından benim büyük dosyamda. Hala ... kırık boru hataları olmadan bunu do bir yol arıyorum
Freek


11

Mac'te <, zcat ile kullanmanız gerekir :

zcat < CONN.20111109.0057.gz|head


2

Eğer çizgilerin sürekli aralık olması gerekiyor, bir seçenek olabilir:

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

5. ve 10. satırlar (her ikisi dahil) arasındaki satırların file.gzyeni bir subFile. İçin sedseçenekler bakın manuel .

Eğer her derler, 5 satır gereklidir:

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

1. satırı çıkaran ve 4 çizginin üzerinden atlayan ve 5. satırı seçen vb.


0

Bu awk parçacığı, yalnızca ilk birkaç satırı değil, aynı zamanda belirleyebileceğiniz bir aralığı da göstermenize izin verecektir. Ayrıca, gzip ile sıkıştırılmış bir dosyada belirli bir satıra işaret eden bir hata mesajının hatalarını ayıklamak için ihtiyacım olan satır numaralarını da ekleyecektir.

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

İşte yukarıdaki bir satırda kullanılan awk pasajı. Awk NR'de, genellikle bir satır numarasına eşdeğer olan yerleşik bir değişkendir (şimdiye kadar bulunan kayıt sayısı). from ve to değişkeni komut satırından -v seçenekleri ile alınır.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
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.