基于分隔符将一个文件拆分为多个文件

107

我有一个文件,每个部分后面都用-|作为分隔符...需要使用Unix为每个部分创建单独的文件。

输入文件示例

wertretr
ewretrtret
1212132323
000232
-|
ereteertetet
232434234
erewesdfsfsfs
0234342343
-|
jdhg3875jdfsgfd
sjdhfdbfjds
347674657435
-|

文件1中的预期结果

wertretr
ewretrtret
1212132323
000232
-|

文件2中的期望结果

ereteertetet
232434234
erewesdfsfsfs
0234342343
-|

预期在文件3中得到的结果

jdhg3875jdfsgfd
sjdhfdbfjds
347674657435
-|

1
你是在编写程序还是想要使用命令行工具来完成这个任务? - rkyser
2
最好使用命令行工具。 - user1499178
你可以使用awk,这样编写一个3或4行的程序就很容易了。不幸的是,我已经不练习了。 - ctrl-alt-delor
12个回答

0
这是一段 Perl 代码,可以完成这个任务。
#!/usr/bin/perl
open(FI,"file.txt") or die "Input file not found";
$cur=0;
open(FO,">res.$cur.txt") or die "Cannot open output file $cur";
while(<FI>)
{
    print FO $_;
    if(/^-\|/)
    {
        close(FO);
        $cur++;
        open(FO,">res.$cur.txt") or die "Cannot open output file $cur"
    }
}
close(FO);

0
这是我为之编写 context-split 的问题类型: http://stromberg.dnsalias.org/~strombrg/context-split.html
$ ./context-split -h
usage:
./context-split [-s separator] [-n name] [-z length]
        -s specifies what regex should separate output files
        -n specifies how output files are named (default: numeric
        -z specifies how long numbered filenames (if any) should be
        -i include line containing separator in output files
        operations are always performed on stdin

哦,这看起来基本上是标准的 csplit 实用程序的副本。请参见 @richard's answer - tripleee
这实际上是我认为最好的解决方案。由于某种原因,我必须拆分一个98G的mysql转储文件,而csplit会占用所有的RAM并被终止。即使它每次只需要匹配一行。毫无意义。这个Python脚本工作得更好,不会占用所有的RAM。 - Stefan Midjich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接