Połącz wiele plików tekstowych w jeden plik

10

Korzystam z prpolecenia unix, aby połączyć wiele plików tekstowych w jeden plik tekstowy:

pr -F *files > newfile

Każdy plik ma inną długość, inną liczbę wierszy. Jestem bardzo zadowolony z wyniku, podoba mi się, że zawiera on nazwę oryginalnego pliku tekstowego, a po nim zawartość tego pliku. Chciałbym jednak wyeliminować puste linie między nazwą oryginalnego pliku tekstowego a jego zawartością. Chcę tylko puste linie między różnymi plikami tekstowymi, aby je rozdzielić. Ponadto drukuje znak ^Lpo zawartości każdego pliku tekstowego i chciałbym go wyeliminować.

Każdy wczytany plik ma również numer „strony”. Tylko jeden plik jest dłuższy niż domyślny wiersz 66. ten plik zostaje ostatecznie podzielony na 2 „strony” i jest podzielony na 2 sekcje podzielone pustymi liniami. Czy możliwe jest ciągłe wpisywanie tego tekstu bez podziału?

Dziękuję za wszelką pomoc!

Janet
źródło

Odpowiedzi:

9

Możesz użyć narzędzia AWK:

awk 'FNR==1{print ""}{print}' *files > newfile

Źródło: /programming/1653063/how-do-i-include-a-blank-line-between-files-im-concatenating-with-cat

Radu Rădeanu
źródło
dziękuję za sugestię. jednak -T nie jest rozpoznawany. pracuję na Mac OS X, jeśli to ma znaczenie.
Janet
niestety, -t tworzy ten sam typ pliku, co plik cat, bez przerwy między wczytywanymi plikami tekstowymi.
Janet
dziękuję Radu. to prawie daje mi to, czego chcę! przepraszam, zdaję sobie sprawę, że teraz publikuję w niewłaściwym miejscu, ponieważ widzę powiadomienie o byciu nie na temat. dziękuję ci za pomoc!
Janet
12

Aby mieć puste wiersze między plikami:

cat file1 newline file2 newline file3 > newfile

Gdzie „nowa linia” to plik z pustą linią.

Darius Žitkevičius
źródło
Czy możesz wyjaśnić, jak utworzyć plik newline? Niektóre edytory tekstu automatycznie dodają znak końca linii do ostatniej linii, a inne nie, więc niektóre osoby mogą mieć problemy z poprawnym utworzeniem tego pliku. Innymi słowy: czy plik o zerowej długości ma zero linii, czy jedną linię?
Eliah Kagan
vim nowa linia w vim: wq To wszystko.
Darius Žitkevičius
Tak długo, jak widzę, „cat” automatycznie umieszcza nową linię między każdym plikiem.
myuce
1
for file in *.txt; do (cat "${file}"; echo) >> concatenated.txt; done

Powyższe doda zawartość pliku eacb txt do concatenated.txt, dodając między nimi nową linię.

Francisco Luz
źródło
0

Możesz użyć catdo zrzucenia tekstu plików do jednego pliku za pomocą:

cat file1 file2 file3 > newfile
Atari911
źródło
2
Niestety catnie spełnia innych wymagań.
Ignacio Vazquez-Abrams,
1
tak dziękuję. ale cat po prostu wyświetla zawartość każdego pliku bez oryginalnej nazwy pliku tekstowego, a także wyświetla zawartość każdego pliku jeden po drugim, bez przerw między nimi. Potrzebuję co najmniej 1 pustej linii między zawartością każdego pliku tekstowego w nowym jednym dużym pliku.
Janet