Объедините текстовые файлы с тем же заголовком

С csplit Я смог разделить текстовый файл с набором имен и дат с помощью этих дат в качестве разделителя.

Примеры файлов:

Файл 'xx00':

1950
Frank
Church
James
McClure

Файл 'xx01':

1945
Zenon

Файл 'xx02':

1950
Bob

То, что я хочу сделать, объединить все файлы с тем же заголовком (год) с тем годом как имя файла и без заголовка. Таким образом, вывод был бы:

Файл '1950':

Frank 
Church
James
McClure
Bob

Файл '1945'

Zenon
2
задан 7 May 2018 в 18:29

1 ответ

Вы могли использовать awk здесь:

awk 'FNR==1{ header=$0;next} {print >"file"header}' filexx*

Произведет один или несколько новых файлов, связывающих файлы с наличием тех же заголовков в первой строке:

$ cat file1945
Zenon
$ cat file1950
Frank
Church
James
McClure
Bob

Объяснения с включением кавычек от awk документация:

Предопределенная встроенная переменная FNR текущее рекордное число в текущем файле. awk инкременты FNR каждый раз это читает новую запись (см. Записи). awk сброс FNR для обнуления каждый раз, это запускает новый входной файл. Таким образом, когда мы делаем FNR==1 средства мы только принимаем меры и получаем ту строку, когда это - самая первая строка текущего файла, и сохраните его содержание в названную переменную header.

next силы оператора awk сразу прекратить обработать текущую запись и переходить к следующей записи. Это означает, что никакие дальнейшие правила не выполняются для текущей записи, и остальная часть действия текущего правила не выполняется, таким образом, в следующий раз FNR!=1 и это вызовет к awk выполните следующий блок, который перенаправляет print вывод (записи/строки) в файл называют file#### (#### займет место со значением header переменная; помните, что необходимо заключить часть в кавычки имени файла, что это - строка.

Мы использовали единственный -‘>’перенаправление здесь. Когда этот тип перенаправления используется, выходной файл стирается, прежде чем первый вывод записан в него. Последующие записи к тому же выходному файлу не стирают выходной файл, но добавляют к нему. (Это отличается от того, как Вы используете перенаправления в сценариях оболочки.), Если выходной файл не существует, он создается.

3
ответ дан 2 December 2019 в 02:43

Другие вопросы по тегам:

Похожие вопросы: