Mam 14 plików, z których wszystkie są częścią jednego tekstu. Chciałbym połączyć je w jedno. Jak to zrobić?
files
text-processing
Ivan
źródło
źródło
*
w „naturalnym” porządku. Jeśli masz „plik1.txt ... plik9.txt ... plik14.txt”, to nie zadziała, ponieważ plik1? .Txt będzie sortować między plikiem1.txt a plikiem2.txt. Musisz zmienić ich nazwę na „plik01.txt ... plik09.txt ... plik14.txt”. Powiedz,echo *
jeśli nie jesteś pewien.numeric_glob_sort
opcję).Jeśli twoje pliki nie znajdują się w tym samym katalogu, możesz użyć polecenia find przed konkatenacją:
Bardzo przydatne, gdy pliki są już zamówione i chcesz je scalić w celu ich analizy.
Bardziej przenośny:
To może, ale nie musi, zachować porządek plików.
źródło
"*.csv"
, ponieważ powłoka przekaże literał*
dofind
.Komenda
w rzeczywistości ma niepożądany efekt uboczny włączenia „scalonego pliku” do konkatenacji, tworząc plik ucieczki. Aby obejść ten problem, albo zapisz scalony plik w innym katalogu;
lub użyj dopasowania wzorca, które zignoruje scalony plik;
źródło
cat * > merged-file
działa w porządku. Globs są przetwarzane przed utworzeniem pliku. Jeślimerged-file
już istnieje,cat
(przynajmniej mój) wykryje, że jest to plik wyjściowy i odmówi jego odczytania. JEŻELI plik już istnieje, a przekierowanie jest później w potoku, to oczywiście nie może tego zrobić, więc wtedy i tylko wtedy otrzymujesz plik niekontrolowany.cat
nie ma możliwości wykrycia, czy plik jest plikiem wyjściowym. Przekierowanie odbywa się w powłoce;cat
drukuje tylko na standardowym wyjściu.Tak jak inni mówią tutaj ... Możesz użyć
cat
Powiedzmy, że masz:
I chcesz tylko
file01
dofile03
ifileA
dofileC
:Lub używając rozszerzenia nawiasów klamrowych:
Lub za pomocą bardziej rozbudowanego rozszerzenia nawiasów klamrowych:
Lub możesz użyć
for
pętli:źródło
[01-03]
nie będzie działał jako wzór globowania.Możesz określić
pattern
plik, a następnie scalić je wszystkie w następujący sposób:źródło
Inną opcją jest sed:
Lub...
Lub...
Lub bez przekierowania ...
Zauważ, że w ostatnim wierszu napisz również merge.txt (nie wmerge.txt!). Możesz użyć w "merge.txt", aby uniknąć pomyłek z nazwą pliku, i -n dla cichego wyjścia.
Oczywiście można także skrócić listę plików za pomocą symboli wieloznacznych. Na przykład w przypadku plików numerowanych, jak w powyższych przykładach, możesz określić zakres z nawiasami klamrowymi w następujący sposób:
źródło