Istnieje standardowe polecenie dzielenia plików - split.
Na przykład, jeśli chcę podzielić plik słów na kilka fragmentów po 10000 linii, mogę użyć:
split -dl 10000 words wrd
i wygenerowałoby kilka plików w formie wrd.01, wrd.02 i tak dalej.
Ale chcę mieć specjalne rozszerzenie dla tych plików - na przykład chcę uzyskać pliki wtd.01.txt, wrd.02.txt.
Czy jest na to sposób?
Nie było to wtedy dostępne, ale w nowszych wersjach (
≥ 8.16
)gnu split
można użyć--additional-suffix
przełącznika, aby mieć kontrolę nad wynikowym rozszerzeniem. Odman split
:więc podczas korzystania z tej opcji:
powstałe elementy automatycznie kończą się na
.txt
:źródło
gnu split
, częściowognu coreutils
. Jest również dostępny w OSX, jeśli instalujeszcoreutils
przez,homebrew
ale pamiętaj, że domyślnie w OSXgnu
narzędzia mająg
przedrostek do swojej nazwy (np.gstat
Zamiaststat
), więc możesz ją wywołać jakogsplit
(lub zmienić PATH zgodnie z instrukcją tutaj, jeśli chcesz używać go tak jaksplit
w OSXsplit
). HTH.gsplit
aby uruchomić przyrostki numeryczne (-d).Takimi zadaniami najlepiej zarządzać za pomocą powłoki. Użyj podziału, a następnie napisz prostą pętlę, aby zmienić nazwę plików. Na przykład
zmieniłby nazwy plików wrd.01, wrd.02 itp., aby wszystkie miały rozszerzenie .txt.
źródło
split+mv
kombinacja jest ponad 6 razy szybsza niżawk
(około 3s w porównaniu do 18s ) dla pliku wejściowego o wielkości 10 milionów linii (75 MB) ... tekst w każdym wierszu miał swój własny numer linii ... Dziękujemy za ponowne stwierdzenie „oczywiste” :)split + mv
jest 75 razy szybszy niżawk
: Gdy jest 100 razy więcej plików,split + mv
jest 1,5 razy szybszy niżawk
. Tak więc dla mnie tasplit + mv
metoda wygrywa bez użycia rąk. Jest tak samo sumieniem (prawdopodobnie więcej) i jest szybszy niżawk
.for file in wrd.*; do mv "$file" "$file.txt"; done
:)