Cara mendapatkan beberapa baris dari file terkompresi .gz tanpa membuka kompresi

90

Bagaimana cara mendapatkan beberapa baris pertama dari file gziped? Saya mencoba zcat, tetapi itu membuat kesalahan

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

Jawaban:

151

zcat(1)dapat dipasok oleh salah satu compress(1)atau oleh gzip(1). Di sistem Anda, tampaknya compress(1)- sedang mencari file dengan ekstensi.Z ekstensi.

Beralih ke gzip -cdtempat zcatdan perintah Anda akan berfungsi dengan baik:

 gzip -cd CONN.20111109.0057.gz | head

Penjelasan

   -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.
sarnold
sumber
7
BTW, jika Anda duduk dengan * .tar.gz, ini akan membantu Anda: tar -xzOf some_huge_file.tar.gz | head
demaniak
Utas lama tetapi ini menghasilkan pipa yang rusak dengan status keluar 1 dengan file gz besar. Ada solusi bersih?
kaligne
2
Solusi terbaik dan termudah yang saya temukan sejauh ini: gunakan zless file.gz | head. zmoremasih meninggalkanmu dengan pipa yang rusak. zlesstampaknya cara untuk pergi.
kaligne
zless tidak keluar ... setidaknya tidak di file besar saya. Saya masih mencari cara untuk melakukan ini tanpa kesalahan pipa rusak ...
Freek
14

Pada beberapa sistem (mis., Mac), Anda perlu menggunakan gzcat.

Marcelo Cantos
sumber
11

Di Mac, Anda perlu menggunakan <with zcat:

zcat < CONN.20111109.0057.gz|head

punkrockpolly
sumber
2

Jika rentang garis yang berkelanjutan perlu, salah satu opsinya mungkin:

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

di mana garis antara baris ke-5 dan ke-10 (keduanya termasuk) file.gzdiekstraksi menjadi baris baru subFile. Untuk sedopsinya, lihat manual .

Jika setiap, katakanlah, baris ke-5 diperlukan:

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

yang mengekstrak baris pertama dan melompati 4 baris dan mengambil baris ke-5 dan seterusnya.

Insinyur Gratis Herpes
sumber
0

Cuplikan awk ini akan memungkinkan Anda menampilkan tidak hanya beberapa baris pertama - tetapi rentang yang dapat Anda tentukan. Ini juga akan menambahkan nomor baris yang saya perlukan untuk men-debug pesan kesalahan yang menunjuk ke jalur tertentu ke bawah dalam file gzip.

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

Berikut adalah potongan awk yang digunakan dalam satu baris di atas. Dalam awk NR adalah variabel built-in (Jumlah record yang ditemukan sejauh ini) yang biasanya setara dengan nomor baris. variabel dari dan ke diambil dari baris perintah melalui opsi -v.

NR>=from {
   print NR,$0; 
   if (NR>=to) 
     exit 1
}
Wolfgang Fahl
sumber