С csplit
Я смог разделить текстовый файл с набором имен и дат с помощью этих дат в качестве разделителя.
Примеры файлов:
Файл 'xx00':
1950
Frank
Church
James
McClure
Файл 'xx01':
1945
Zenon
Файл 'xx02':
1950
Bob
То, что я хочу сделать, объединить все файлы с тем же заголовком (год) с тем годом как имя файла и без заголовка. Таким образом, вывод был бы:
Файл '1950':
Frank
Church
James
McClure
Bob
Файл '1945'
Zenon
Вы могли использовать 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
переменная; помните, что необходимо заключить часть в кавычки имени файла, что это - строка.
Мы использовали единственный -‘>
’перенаправление здесь. Когда этот тип перенаправления используется, выходной файл стирается, прежде чем первый вывод записан в него. Последующие записи к тому же выходному файлу не стирают выходной файл, но добавляют к нему. (Это отличается от того, как Вы используете перенаправления в сценариях оболочки.), Если выходной файл не существует, он создается.