roura k rozdělení použijte k otevření souboru buď gunzip -c nebo zcat
gunzip -c bigfile.gz | split -l 400000
Přidejte výstupní specifikace k příkazu split.
Jak to nejlépe udělat, závisí na tom, co chcete:
- Chcete extrahovat jednu část velkého souboru?
- Nebo chcete vytvořit všechny části najednou?
Pokud chcete jednu část souboru , váš nápad použít gunzip
a head
má pravdu. Můžete použít:
gunzip -c hugefile.txt.gz | head -n 4000000
To by znamenalo výstup prvních 4000000 řádků na standardní výstup – pravděpodobně budete chtít připojit další rouru, abyste s daty skutečně něco udělali.
Chcete-li získat další části, použijte kombinaci head
a tail
, jako:
gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000
získat druhý blok.
Je možná řešením provedení série těchto akcí nebo by gunzip -vyžadoval dostatek místa pro rozbalení celého souboru
Ne, gunzip -c
nevyžaduje žádné místo na disku – vše dělá v paměti a pak to streamuje do stdout.
Pokud chcete vytvořit všechny díly najednou , je efektivnější vytvořit je všechny jediným příkazem, protože pak se vstupní soubor čte pouze jednou. Jedním dobrým řešením je použít split
; podrobnosti naleznete v odpovědi jima mcnamara.
Když pracujete na (nepřevinutelném) streamu, budete chtít použít tvar „+N“ pro získání řádků začínajících od řádku N výše.
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