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.

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.

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


11

Di Mac, Anda perlu menggunakan <with zcat:

zcat < CONN.20111109.0057.gz|head


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.


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
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.