Mam duży plik i muszę podzielić na dwa pliki. Załóżmy, że w pierwszym pliku należy wybrać 1000 linii i umieścić je w innym pliku oraz usunąć te linie w pierwszym pliku.
Próbowałem użyć, split
ale tworzy wiele fragmentów.
Mam duży plik i muszę podzielić na dwa pliki. Załóżmy, że w pierwszym pliku należy wybrać 1000 linii i umieścić je w innym pliku oraz usunąć te linie w pierwszym pliku.
Próbowałem użyć, split
ale tworzy wiele fragmentów.
Odpowiedzi:
Najłatwiejszym sposobem jest prawdopodobnie użycie head
i tail
:
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Że wprowadzi pierwsze 1000 wierszy z input-file
INTO output1
oraz wszystkie linie od 1001 do końca woutput2
Myślę, że split
to najlepsze podejście.
Spróbuj użyć -l xxxx
opcji, gdzie xxxx to liczba linii, które chcesz w każdym pliku (domyślnie jest to 1000).
Możesz użyć tej -n yy
opcji, jeśli bardziej martwi Cię liczba utworzonych plików. Użyj -n 2
podzieli twój plik na tylko 2 części, bez względu na ilość linii w każdym pliku.
Możesz policzyć liczbę linii w swoim pliku wc -l filename
. Jest to polecenie „wordcount” z opcją linii.
man split
man wc
split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
.
To jest praca dla csplit
:
csplit -s infile 1001
s
rozłoży się iluzorycznie infile
, pierwszy kawałek xx00
- do linii 1001, ale bez niej, a drugi kawałek xx01
- pozostałe linie.
Możesz grać z opcjami, jeśli potrzebujesz różnych nazw plików wyjściowych, np. Używając -f
i określając prefiks :
csplit -sf piece. infile 1001
tworzy dwa pliki o nazwie piece.00
ipiece.01
Za pomocą smarta head
możesz także zrobić coś takiego:
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
csplit
. Bardzo dobrze. (Właśnie czytam listę poleceń POSIX i na początku miałem ogromne problemy z owinięciem głowy wokół celu csplit
polecenia. Okazuje się, że to naprawdę bardzo proste.) :)
Prosty sposób na zrobienie tego, o co pyta jedno pytanie:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
lub dla tych z was, którzy naprawdę nie znoszą pisać długich, intuicyjnie zrozumiałych poleceń,
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
split --help
?