Como obter as primeiras linhas de um arquivo compactado com gzip? Tentei zcat, mas está gerando um erro
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
Como obter as primeiras linhas de um arquivo compactado com gzip? Tentei zcat, mas está gerando um erro
zcat CONN.20111109.0057.gz|head
CONN.20111109.0057.gz.Z: A file or directory in the path name does not exist.
Respostas:
zcat(1)
pode ser fornecido por compress(1)
ou por gzip(1)
. Em seu sistema, parece ser compress(1)
- está procurando um arquivo com um.Z
extensão.
Mude para gzip -cd
no lugar de zcat
e seu comando deve funcionar bem:
gzip -cd CONN.20111109.0057.gz | head
Explicação
-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.
zless file.gz | head
. zmore
ainda deixa você com o tubo quebrado. zless
parece ser o caminho a percorrer.
Em alguns sistemas (por exemplo, Mac), você precisa usar gzcat
.
Em um mac, você precisa usar o <
com zcat:
zcat < CONN.20111109.0057.gz|head
Se for necessário um intervalo contínuo de linhas , uma opção pode ser:
gunzip -c file.gz | sed -n '5,10p;11q' > subFile
onde as linhas entre a 5ª e a 10ª linhas (ambas inclusivas) de file.gz
são extraídas em um novo subFile
. Para sed
opções, consulte o manual .
Se toda, digamos, a 5ª linha for necessária:
gunzip -c file.gz | sed -n '1~5p;6q' > subFile
que extrai a 1ª linha e salta mais de 4 linhas e escolhe a 5ª linha e assim por diante.
Este snippet do awk permitirá que você mostre não apenas as primeiras linhas - mas um intervalo que você pode especificar. Ele também adicionará números de linha que eu precisava para depurar uma mensagem de erro apontando para uma determinada linha em um arquivo compactado.
gunzip -c file.gz | awk -v from=10 -v to=20 'NR>=from { print NR,$0; if (NR>=to) exit 1}'
Aqui está o snippet do awk usado no liner acima. No awk, NR é uma variável embutida (Número de registros encontrados até agora) que geralmente é equivalente a um número de linha. as variáveis from e to são obtidas na linha de comando por meio das opções -v.
NR>=from {
print NR,$0;
if (NR>=to)
exit 1
}
tar -xzOf some_huge_file.tar.gz | head