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>) {
#关闭输入、输出文件
close(TXT);
close(OUT1);
close(OUT2);
sub usage
可再考慮改進一下以提高通用性和易用性我寫了一個腳本可供參考
使用方法是:
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分割文件的主要内容,如果未能解决你的问题,请参考以下文章