Объедините текстовые файлы в один файл, а затем снова разделите их - PullRequest
1 голос
/ 19 сентября 2019

У меня есть сотни текстовых файлов, которые находятся в одном каталоге.Я хотел бы иметь возможность сделать следующее:

  1. Объединить все файлы в один текстовый файл.Эта команда вставит символ при объединении (например, §) вместе с именем файла.
  2. [Затем я делаю некоторую работу над объединенным файлом, который состоит из внесения изменений.Некоторые из этих изменений включают использование приоритетного программного обеспечения, которое лучше работает с одним большим файлом, чем с множеством маленьких файлов].
  3. Используйте вторую команду, чтобы просмотреть объединенный файл и разделить его на отдельные файлы, используя файлимя, которое было рядом с символом, чтобы назвать каждый файл разделения.

Пример:

Перед присоединением:

Файл 1: "Towns.txt"

Béthlem
Cabul
Corinthia
ruined lands
eshcol
Gabbatha
old town

Файл 2: «Фрукты и орехи.txt»

Apples
Pomegranates
Sycamore

После присоединения, но до внесения изменений

(один файл)

§Towns.txt
Béthlem
Cabul
Corinthia
ruined lands
eshcol
Gabbatha
old town
$Fruits and Nuts.txt
Apples
Pomegranates
Sycamore

После присоединения и внесения изменений

(Эти изменения вносятся вручную в одном файле)

§Towns.txt
Bethlehem
Cabul
Corinth
Ruined lands
Eshcol
Gabbatha
The Old Town
$Fruits and Nuts.txt
Apples
Pomegranates
Sycamore

После разделения:

Файл 1: "Города".txt "

Bethlehem
Cabul
Corinth
Ruined lands
Eshcol
Gabbatha
The Old Town

Файл 2:" Фрукты и орехи. txt "

Apples
Pomegranates
Sycamore


ШагиЯ попытался

Объединить файлы

Я переработал ответ в этой теме , чтобы создать команду awk, которая может объединять файлы вместе с именем файла с префиксомсимвол §.

awk '(FNR==1){print "§" FILENAME }1' * > ^0join.txt;

Кажется, это хорошо работает.

Разделение файлов

Этот поток предоставляет решение для разделения файлов.Я переработал для моих нужд, чтобы сделать это:

awk -v RS='§' '{ outfile = "output_file_" NR; print > outfile}' ^0join.txt   

Единственная проблема заключается в том, что выходные файлы имеют имена "outfile1", "outfile2" и т. Д. Они также держат имя файла в верхней части каждогофайл, который я не хочу.Кроме того, иногда, когда я использую эту команду, она просто помещает все в один файл с именем «outfile», а не разделяет их.

Я также нашел эту ветку , у которой было другое решение, которое я переработал:

awk '{print $0 "file" NR}' RS='§'  ^0join.txt

Однако, похоже, это ничего не сделало.

Примечания

§ может быть любым другим символом.Я использую Mac OS 10.14.6, поэтому я хотел бы что-то, что будет работать в терминале Mac OS.

1 Ответ

1 голос
/ 19 сентября 2019

Не могли бы вы попробовать следующее.

Для присоединения к команде:

awk 'FNR==1{print "§" FILENAME}; 1' Towns.txt  "Fruits and Nuts.txt" > Output_file

Для разделения файлов:

awk '/^§/{close(file);sub(/^§/,"");file=$0;next} {print > (file)}' Output_file

ПРИМЕЧАНИЕ..txt файлы должны быть переданы в команду, тогда мы можем поставить /complete/path/to/txt_files/*.txt/ после awk кода 1-го и можно удалить отдельные имена файлов оттуда (не проверялось, но должно работать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...