perl分割文件

Posted 浙江省生物信息学学会

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl分割文件相关的知识,希望对你有一定的参考价值。

以下perl脚本,可以将一个大文本文件分割成两个,如果总行数为奇数,第一个文件.out1多一行,如果是偶数,两个文件中的行数相同。


复制内容到剪贴板

代码:

#!/usr/bin/perl
#此程序将一个大文本文件分成两个。

#以一个.txt结尾被分割文件作为参数。
#如果没有提供待分割文本,那么程序中止运行。
die if $#ARGV == -1;

#输入文件以.txt结尾,输出文件替换.txt扩展名为.out1和.out2
$outfile1 = $ARGV[0];
$outfile2 = $ARGV[0];
$outfile1 =~ s/\..+$/\.out1/i;
$outfile2 =~ s/\..+$/\.out2/i;

#打开或者创建输出文件以供写入。
open(OUT1, "> $outfile1") or die "无法创建第一个新文件用以保存分割结果\n";
open(OUT2, "> $outfile2") or die "无法创建第二个新文件用以保存分割结果\n";

# $Line获取文件的总行数
open(TXT, $ARGV[0]) or die "无法打开被分割文件。\n";
@Lines=<TXT>;
$Lines = @Lines;
close (TXT);

# 如果行号小于总行数的一半,该行写入结果文件out1,如果行号大于一半,该行写入out2
$LineNo = 0;
open(TXT, $ARGV[0]) or die "无法打开被分割文件。\n";
while ($line = <TXT>) {
        $LineNo +=1;
        if ($LineNo < ($Lines/2+1) ) {
                print OUT1 $line;
        }
        else{
                print OUT2 $line;
                }
  }
  print "已经分割完毕!";
  
#关闭输入、输出文件
close(TXT);
close(OUT1);
close(OUT2);


sub usage
        {
        print "\n\t usage = perl split1.pl 你的待分割文件\n";
        }




可再考慮改進一下以提高通用性和易用性我寫了一個腳本可供參考

使用方法是:

splitfile 文件名 拆分行數

譬如要將含1000000行文本的文件abc.txt按每250000行拆為一個文件,祇須執行:
splitfile abc.txt 250000

源代碼:


引用:

open (IN, "$ARGV[0]" ) || do {
            print "\n冇辦法打開文件$ARGV[0]。\n\n使用方法:\nsplitfile 文件名 拆分行數\n";
            exit 0; };
@char = <IN>;
close IN;

!$ARGV[1] && do {
            print "\n請指定拆分行數。\n\n使用方法:\nsplitfile 文件名 拆分行數\n";
            exit 0; };
@char<=$ARGV[1] && do {
            print "\n指定嘅拆分行數大過文件總行數,$ARGV[0]冇必要拆分。\n";
            exit 0; };
($j = @char/$ARGV[1]) =~ s/\..*//;

@char%$ARGV[1] && $j++;

for ($i=1, $f=A; $i<=$j; $i++, $f++) {
            open ($f, ">分割$i.txt" ) || do {
            print "\n創建文件「分割$i.txt」失敗!\n";
            exit 0; };
            &RW($f);
            close ($f);
}

sub RW {
            my ($a) = @_;
            @$a = splice (@char, 0, $ARGV[1]);
            select $a;
            print @$a;
}


以上是关于perl分割文件的主要内容,如果未能解决你的问题,请参考以下文章

Perl 用逗号分割函数

如何有条件地将 C 代码片段编译到我的 Perl 模块?

perl inline:autosplit不会将ls命令分割为@F数组

Perl 6 中嵌入式注释的分割符

按固定元素数目分割数组- perl,python

如何用逗号分割字符串而不在perl的引号内包含逗号?