Разбиение объединенного файла на основе текста заголовка - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть несколько очень больших файлов, которые в основном представляют собой объединение нескольких небольших файлов, и мне нужно разбить их на составляющие файлы. Мне также нужно назвать файлы так же, как и исходные файлы.

Например, файлы QMAX123 и QMAX124 были объединены в:

;QMAX123 - Student

... file content ...

;QMAX124 - Course

... file content ...

Мне нужно пересоздать файл QMAX123 как

;QMAX123 - Student

... file content ...

А QMAX124 как

;QMAX124 - Course

... file content ...

Исходный заголовок файла ;QMAX<some number> уникален и отображается только как заголовок в файле.

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

awk '/^;QMAX/{close("file"f);f++}{print $0 > "file"f}' <filename>

Таким образом, я могу либо адаптировать этот скрипт для правильного именования файла, либо переименовать файлы разбиения, созданные с помощью приведенного выше скрипта, в зависимости от содержимого файла, в зависимости от того, что проще.

В настоящее время я использую Cygwin Bash (который имеет Perl и AWK), если это имеет какое-либо отношение к вашему ответу.

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

С Awk это так же просто, как

awk '/^;QMAX/ {filename = substr($1,2)} {print >> filename}' input_file
1 голос
/ 09 декабря 2010

Следующий Perl должен выполнить трюк

    use warnings ;
    use strict ;

    my $F   ; #will hold a filehandle
    while (<>) {
      if ( / ^ ; (\S+) /x) {
        my $filename = $1 ;
        open $F, '>' ,  $filename  or die "can't open $filename " ;
      } else {
        next unless defined $F ;
        print $F $_ or warn "can't write"  ;
      }
    }

Обратите внимание, что он отбрасывает любой ввод перед строкой с именем файла next unless defined $F ; Возможно, вы захотите сгенерировать ошибку или добавить файл по умолчанию.Дайте мне знать, и я могу изменить его

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