Ce face split
Comanda split taie un fișier în bucăți. Cu -l fiecare bucată are un număr fix de rânduri (util pentru CSV-uri și jurnale mari), iar cu -b are o dimensiune fixă în octeți (util pentru arhive care trebuie trimise în părți).
Bucățile se numesc implicit xaa, xab, xac și așa mai departe; poți da propriul prefix ca ultim argument. Pentru că numele sunt în ordine alfabetică, fișierul inițial se reface simplu cu cat prefix* > fisier. Versiunea GNU are în plus sufixe numerice (-d), extensie pentru bucăți (--additional-suffix) și împărțirea în N părți egale (-n).
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
-l N |
Câte N rânduri în fiecare bucată (implicit 1000). |
-b DIMENSIUNE |
Câți octeți în fiecare bucată; în GNU acceptă sufixe ca K, M, G (ex. -b 100M). |
-d |
GNU: sufixe numerice (00, 01…) în loc de litere. |
--additional-suffix=SUF |
GNU: adaugă o extensie fiecărei bucăți (ex. .csv). |
-n N |
GNU: împarte fișierul în N bucăți de dimensiuni egale (-n l/N fără a tăia rânduri). |
Exemple
Exemplul 1: Împărțirea unui fișier în bucăți de câte 4 rânduri
Zece rânduri împărțite câte patru dau trei fișiere: ultimul are doar rândurile rămase. La final refacem fișierul și verificăm cu cmp că este identic.
seq 1 10 > numere.txt
split -l 4 numere.txt parte_
for f in parte_*; do
echo "$f: $(tr '\n' ' ' < "$f")"
done
cat parte_* > refacut.txt
cmp numere.txt refacut.txt && echo "Fișierul refăcut este identic."
Rezultat
parte_aa: 1 2 3 4
parte_ab: 5 6 7 8
parte_ac: 9 10
Fișierul refăcut este identic.
Exemplul 2: Împărțirea după dimensiune
Fișierul are 2500 de octeți; cu -b 1000 rezultă două bucăți de 1000 și una de 500.
head -c 2500 /dev/zero > arhiva.bin
split -b 1000 arhiva.bin arhiva.part.
for f in arhiva.part.*; do
echo "$f: $(wc -c < "$f" | tr -d ' ') octeți"
done
Rezultat
arhiva.part.aa: 1000 octeți
arhiva.part.ab: 1000 octeți
arhiva.part.ac: 500 octeți
Exemplul 3: Bucăți CSV numerotate (GNU)
Pentru un import pe bucăți, păstrăm antetul deoparte și împărțim restul în fișiere numerotate cu extensia .csv.
tail -n +2 comenzi.csv | split -l 50000 -d --additional-suffix=.csv - comenzi_
ls comenzi_*
Ieșire în terminal
comenzi_00.csv comenzi_01.csv comenzi_02.csv
Greșeli frecvente
- Prefix fără separator:
split -l 100 date.csv datecreeazădateaa,dateab; un prefix cadate_saudate.part.e mai ușor de citit. - Împărțirea unui CSV cu antet: doar prima bucată primește rândul de antet. Scoate antetul înainte (
tail -n +2) și adaugă-l la fiecare bucată dacă programul care le citește are nevoie de el.
Comenzi înrudite
cat: Afișează conținutul unuia sau mai multor fișiere și le concatenează în ieșirea standard.head: Afișează primele linii (implicit primele 10) dintr-un fișier sau flux de date.tail: Afișează ultimele linii dintr-un fișier și permite monitorizarea în timp real a datelor noi.wc: Contorizează numărul de linii, cuvinte și octeți dintr-un fișier sau flux de date.