jika saya memiliki file .gz di unix yang memiliki sejumlah baris. Bagaimana saya bisa menghitung garis pada unix tanpa membuka kompresnya.
command-line
unix
Vijay
sumber
sumber
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 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
.sumber
gzip
berbedacompress
, Anda inginkangzcat
.Ini tampaknya juga berfungsi - grep untuk jumlah akhir baris dalam file
sumber
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:
Yang memberi saya jumlah baris dan file itu dihitung dari pada baris bergantian, menggunakan 8 prosesor. Itu berlari dengan cepat!
sumber
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Gunakan perintah ini:
Perintah
gzgrep
berperilaku sama sepertigrep
tetapi pada file yang dikompresi gzip. Itu mendekompres file dengan cepat untuk pencocokan regex.Dalam hal ini
-c
instruksikan 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 $
.sumber
gzgrep
tersedia 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:
maka jumlah garis perkiraan adalah
1000 * (size of $file) / (size of 1000-line-sample)
, selama data Anda cukup homogen per baris.sumber
gzip -cd <file.gz> | wc -l
Ini berhasil untuk saya.
sumber