根据标题文本拆分连接文件

时间:2010-12-09 17:21:40

标签: perl unix awk

我有一些非常大的文件,它们基本上是几个小文件的串联,我需要将它们分成它们的组成文件。我还需要将文件命名为原始文件。

例如,文件QMAX123QMAX124已连接到:

;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 个答案:

答案 0 :(得分:1)

以下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 ;的行之前丢弃任何输入您可能会生成错误或添加默认文件。让我知道,我可以改变它

答案 1 :(得分:1)

使用Awk,它就像

一样简单
awk '/^;QMAX/ {filename = substr($1,2)} {print >> filename}' input_file