pipe per dividere usa gunzip -c o zcat per aprire il file
gunzip -c bigfile.gz | split -l 400000
Aggiungi le specifiche di output al comando split.
Il modo migliore per farlo dipende da ciò che desideri:
- Vuoi estrarre una singola parte del file di grandi dimensioni?
- O vuoi creare tutte le parti in una volta sola?
Se desideri una singola parte del file , la tua idea di usare gunzip
e head
è giusto. Puoi usare:
gunzip -c hugefile.txt.gz | head -n 4000000
Ciò genererebbe le prime 4000000 righe su standard out:probabilmente vorrai aggiungere un'altra pipe per fare effettivamente qualcosa con i dati.
Per ottenere le altre parti, devi usare una combinazione di head
e tail
, come:
gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000
per ottenere il secondo blocco.
Forse fare una serie di questi è una soluzione o il gunzip richiederebbe spazio sufficiente per decomprimere l'intero file
No, il gunzip -c
non richiede spazio su disco:fa tutto in memoria, quindi lo trasmette a stdout.
Se vuoi creare tutte le parti in una volta sola , è più efficiente crearli tutti con un singolo comando, perché in tal caso il file di input viene letto solo una volta. Una buona soluzione è usare split
; vedi la risposta di jim mcnamara per i dettagli.
Dato che stai lavorando su uno stream (non riavvolgibile), ti consigliamo di utilizzare la forma "+N" della coda per ottenere le righe che iniziano dalla riga N in poi.
zcat hugefile.txt.gz | head -n 40000000
zcat hugefile.txt.gz | tail -n +40000001 | head -n 40000000
zcat hugefile.txt.gz | tail -n +80000001 | head -n 40000000