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.