2010-12-09 29 views
0

我有幾個非常大的文件,基本上是幾個小文件的連接,我需要將它們拆分爲它們的組成文件。我還需要將這些文件命名爲與原始文件相同的文件。根據標題文本拆分連接文件

例如文件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),如果這對你的答案有任何影響。

回答

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 ;你可能關心產生一個錯誤或添加默認的文件中的行之前丟棄任何輸入。讓我知道,我可以改變它

+0

看起來非常接近,它雖然剝離文件頭。你可以做出改變來保護它們嗎? – StevenWilkins 2010-12-09 18:08:12

1

使用awk,它是那樣簡單

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