Aqui está um pequeno script em perl para você. Você pode salvá-lo como split_files.pl
e executá-lo como perl split_files.pl input.txt
. A saída será armazenada em arquivos chamados chunk_0
, chunk_1
etc.
#!/usr/bin/perl
use strict;
use warnings;
my$infile=shift(@ARGV);
my$linecount=0;
my$filecount=0;
my$outfile="chunk_".$filecount;
open(IN,'<',$infile) or die $!;
open(OUT,'>',$outfile) or die $!;
$/="\n>";
while(<IN>)
{
chomp;
$_=~s/>//g;
if($linecount==100)
{
$filecount++;
$outfile="chunk_".$filecount;
close OUT or die $!;
open(OUT,'>',$outfile) or die $!;
$linecount=0;
}
print OUT ">",$_,"\n";
$linecount++;
}
close OUT or die $!;
close IN or die $!;
Explicação:
O truque do script é a linha $/="\n>";
. Essa linha altera o caractere de quebra de linha padrão ( \n
) para "newline + >" (%código%). No laço while, cada bloco começando com ">" é usado de uma só vez. Eu usei duas variáveis de contagem ( \n>
e $linecount
). As linhas (ou blocos neste caso) são contadas e quando essa contagem atinge 100, um novo arquivo é usado para a saída.