Como fazer isso melhor depende do que você deseja:
- Deseja extrair uma única parte do arquivo grande?
- Ou você quer criar todas as partes de uma só vez?
Se você quiser uma única parte do arquivo , sua ideia de usar gunzip
e head
está correta. Você pode usar:
gunzip -c hugefile.txt.gz | head -n 4000000
Isso produziria as primeiras 4000000 linhas na saída padrão - você provavelmente deseja acrescentar outro pipe para realmente fazer algo com os dados.
Para obter as outras partes, você usaria uma combinação de head
e tail
, como:
gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000
para obter o segundo bloco.
Is perhaps doing a series of these a solution or would the gunzip -c require enough space for the entire file to be unzipped
Não, o gunzip -c
não requer nenhum espaço em disco - ele faz tudo na memória e o transmite para o stdout.
Se você quiser criar todas as partes de uma só vez , é mais eficiente criá-las todas com um único comando, porque o arquivo de entrada é lido apenas uma vez. Uma boa solução é usar split
; veja a resposta de jim mcnamara para detalhes.