se eu tiver um arquivo .gz no unix que tenha um certo número de linhas. Como eu poderia contar as linhas no unix sem descompactá-lo.
command-line
unix
Vijay
fonte
fonte
Respostas:
Obviamente, você não pode contar novas linhas se o arquivo ainda estiver compactado.
Mas você pode descompactar em um fluxo e contar as novas linhas nesse fluxo, sem precisar gravar o arquivo (descompactado) no disco. Isso seria algo assim:
zcat para descomprimir & cat, wc para wordcount. Consulte as páginas de manual para ambos, se você quiser saber mais.
EDITAR
Se você não possui zcat, zcat é apenas outro nome para
gunzip -c
.fonte
gzip
é diferentecompress
, você desejagzcat
.Isso também parece funcionar - grep pelo número de terminações de linha no arquivo
fonte
wc -l
Se você quiser fazer isso rapidamente, recomendo usar 'pigz' (que IIRC significa "Implementação Paralela do GZip"). Eu apenas tive uma situação semelhante em que queria contar o número de linhas em um monte de arquivos compactados com gzip e aqui estava a minha solução:
O que me deu o número de linhas e o arquivo em linhas alternadas, usando 8 processadores. Correu rapidamente!
fonte
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
Use este comando:
O comando
gzgrep
se comporta da mesma maneira quegrep
nos arquivos compactados gzip. Ele descompacta o arquivo rapidamente para a correspondência de regex.Nesse caso,
-c
instrua o comando a emitir o número de linhas correspondentes e o regex$
corresponde ao final da linha para que corresponda a todas as linhas ou arquivos.O resultado final é idêntico a
gzip -dc filename.gz | grep -c $
.fonte
gzgrep
disponível em outros sistemas que não o Solaris?Se você estiver de acordo com uma estimativa aproximada, e não com uma contagem exata, e realmente extrair o arquivo inteiro ou zgrepping-lo para terminações de linha, levaria muito tempo (que era minha situação agora), você pode:
a contagem aproximada de linhas é
1000 * (size of $file) / (size of 1000-line-sample)
, desde que seus dados sejam bastante homogêneos por linha.fonte
gzip -cd <file.gz> | wc -l
Isso funcionou para mim.
fonte