jika saya memiliki file .gz di unix yang memiliki sejumlah baris. Bagaimana saya bisa menghitung garis pada unix tanpa membuka kompresnya.
jika saya memiliki file .gz di unix yang memiliki sejumlah baris. Bagaimana saya bisa menghitung garis pada unix tanpa membuka kompresnya.
Jawaban:
Anda jelas tidak dapat menghitung baris baru jika file masih dikompresi.
Tapi Anda bisa mendekompres ke aliran, dan menghitung baris baru di aliran itu, tanpa pernah menulis file (didekompresi) ke disk. Itu akan menjadi seperti ini:
zcat file.gz | wc -l
zcat untuk dekompresi & kucing, wc untuk wordcount. Lihat halaman manual untuk keduanya jika Anda ingin tahu lebih banyak.
EDIT
Jika Anda tidak memiliki zcat, zcat hanyalah nama lain untuk gunzip -c.
gzipberbeda compress, Anda inginkan gzcat.
Ini tampaknya juga berfungsi - grep untuk jumlah akhir baris dalam file
zgrep -Ec "$" file.gz
wc -l
Jika Anda ingin melakukannya dengan cepat, saya sarankan menggunakan 'pigz' (yang IIRC singkatan dari "Implementasi Paralel GZip"). Saya baru saja mengalami situasi yang sama di mana saya ingin menghitung jumlah baris dalam banyak file yang di-gzip dan inilah solusi saya:
for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done
Yang memberi saya jumlah baris dan file itu dihitung dari pada baris bergantian, menggunakan 8 prosesor. Itu berlari dengan cepat!
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Gunakan perintah ini:
gzgrep -c $ filename.gz
Perintah gzgrepberperilaku sama seperti greptetapi pada file yang dikompresi gzip. Itu mendekompres file dengan cepat untuk pencocokan regex.
Dalam hal ini -cinstruksikan perintah untuk menampilkan jumlah baris yang cocok dan regex $cocok dengan akhir baris sehingga cocok dengan setiap baris atau file.
Hasil akhir identik dengan gzip -dc filename.gz | grep -c $.
gzgreptersedia di sistem lain selain Solaris?
Jika Anda baik-baik saja dengan perkiraan kasar daripada hitungan yang tepat, dan benar-benar mengekstraksi seluruh file atau zgrepping untuk akhir baris akan memakan waktu terlalu lama (yang merupakan situasi saya sekarang), Anda dapat:
zcat "$file" | head -1000 > 1000-line-sample.txt
ls -ls 1000-line-sample.txt "$file"
maka jumlah garis perkiraan adalah 1000 * (size of $file) / (size of 1000-line-sample), selama data Anda cukup homogen per baris.