si tengo un archivo .gz en Unix que tiene cierto número de líneas. ¿Cómo podría contar las líneas en Unix sin descomprimirlo?
command-line
unix
Vijay
fuente
fuente
Respuestas:
Obviamente, no puede contar nuevas líneas si el archivo todavía está comprimido.
Pero puede descomprimir en una secuencia y contar las nuevas líneas en esa secuencia, sin siquiera escribir el archivo (descomprimido) en el disco. Eso sería algo así:
zcat para descomprimir y cat, wc para conteo de palabras. Vea las páginas de manual para ambos si desea saber más.
EDITAR
Si no tiene zcat, zcat es solo otro nombre para
gunzip -c
.fuente
gzip
es distinto de locompress
que quieresgzcat
.Esto también parece funcionar: grep para el número de finales de línea en el archivo
fuente
wc -l
Si desea hacerlo rápidamente, le recomiendo usar 'pigz' (que IIRC significa "Implementación paralela de GZip"). Acabo de tener una situación similar en la que quería contar el número de líneas en un montón de archivos gzip'ed y aquí estaba mi solución:
Lo que me dio el número de líneas y el archivo desde el que contó en líneas alternas, usando 8 procesadores. ¡Corrió rápido!
fuente
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Usa este comando:
El comando se
gzgrep
comporta igual quegrep
pero en los archivos comprimidos de gzip. Descomprime el archivo sobre la marcha para la coincidencia de expresiones regulares.En este caso,
-c
indique al comando que muestre el número de líneas coincidentes y la expresión regular$
coincide con el final de la línea para que coincida con cada línea o el archivo.El resultado final es idéntico a
gzip -dc filename.gz | grep -c $
.fuente
gzgrep
disponible en otros sistemas que no sean Solaris?Si está de acuerdo con una estimación aproximada en lugar de un recuento exacto, y en realidad extraer todo el archivo o agruparlo para las terminaciones de línea tomaría demasiado tiempo (que era mi situación en este momento), puede:
entonces el recuento aproximado de líneas es
1000 * (size of $file) / (size of 1000-line-sample)
, siempre que sus datos sean bastante homogéneos por línea.fuente
gzip -cd <file.gz> | wc -l
Esto funcionó para mí.
fuente