-5

我需要建议如何制作一个能够使用数字线将文件拆分为较小文件的 perl 程序。

例如:

perl split.pl --file="data.txt" --numberLine=2

输入

数据.txt:

line1
line2
line3
line4

输出

数据1.txt

line1
line2

数据2.txt

line3
line4

或者

perl split.pl --file="data.txt" --numberLine=1

数据1.txt

line1

数据2.txt

line2

数据3.txt

line3

数据4.txt

line4

或 perl split.pl --file="data.txt" --numberLine=3

数据1.txt

line1
line2
line3

数据2.txt

line4
4

3 回答 3

5

分裂:

system("split -l 2 $file");
于 2013-05-14T08:10:16.033 回答
1
#!/usr/bin/perl
#

use strict;
use warnings;
use Getopt::Long;
use File::Basename;
my ($length, $file);

my $res= GetOptions ("numberLine=i" => \$length,
                      "file=s" => \$file);

my ($name,$path,$suffix) = fileparse($file,("\.txt","\.dat"));

open(my $fh,$file) || die "$file $!";

my $lc=0;
my $outfh=undef;
while(<$fh>) {
    if (($lc % $length) == 0) {
            my $n=int($lc/$length)+1;
            open($outfh,">$name$n.txt") || warn "$name$n.txt $!";
            }
    $lc++;
    print $outfh $_;
    }

或者,这里是如何将其作为一个衬里进行。您只需在脚本行中自己设置“numberLines”并将文件名作为参数提供

perl -n -e 'print; unless (($.-1)%2){$n++;open(F,">data$n.txt")} print F $_' data.txt
于 2013-05-14T08:05:07.647 回答
0
 sed -e '1,2wdata1.txt' -e '3,$wdata2.txt' data.txt
于 2013-05-14T08:34:47.810 回答