我有一些非常大的文件,它们基本上是几个小文件的串联,我需要将它们分成它们的组成文件。我还需要将文件命名为原始文件。
例如,文件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),如果这与你的答案有关。
答案 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