用于通过将字符匹配为多个文件来拆分单个文件的perl代码
我想将一个大数据文件拆分为多个文件,只要它匹配一个“^”字符用于通过将字符匹配为多个文件来拆分单个文件的perl代码,perl,Perl,我想将一个大数据文件拆分为多个文件,只要它匹配一个“^”字符 #!/usr/bin/perl -w use strict; print "enter the data file name"; chomp( my $a=<STDIN> ); open (<READ>,"$a")| "error"; while ($line=<READ>) { my @array=split(" ",$line) unless ^
#!/usr/bin/perl -w
use strict;
print "enter the data file name";
chomp( my $a=<STDIN> );
open (<READ>,"$a")| "error";
while ($line=<READ>)
{
my @array=split(" ",$line) unless ^ ;
#/usr/bin/perl-w
严格使用;
打印“输入数据文件名”;
chomp(我的$a=);
打开(,“$a”)|“错误”;
而($line=)
{
my@array=split(“,$line),除非^;
数据文件拆分后,将创建总共23个文件使用严格;
use strict;
open(FILE,'AUTOSAR.txt');
local $/;
my $var = <FILE>;
my @arr = split('\^',$var);
my $i=0;
foreach (@arr) {
$i++;
open(FILE1,">$i.txt");
print FILE1 $_;
close FILE1;
}
close FILE;
打开(文件“AUTOSAR.txt”);
本地$/;
我的$var=;
my@arr=split('\^',$var);
我的$i=0;
foreach(@arr){
$i++;
打开(文件1,“>$i.txt”);
打印文件1$;
关闭文件1;
}
关闭文件;
$,=”;
$"="";
我的$i=1;
打开“>DATA_${i}.txt”;
while(){
咀嚼;
my@F=拆分(/\^/);
如果(@F==1){
打印出美元,“\n”;
}
elsif(@F>1){
$i++;
收尾;
打开“>DATA_${i}.txt”;
打印出“@F[1..$#F]\n”;
}
}
收尾;
这是一个经过清理和测试的saiprathapreddy.obula程序版本
use strict;
use warnings;
open(FILE,'AUTOSAR.txt');
local $/;
my $var = <FILE>;
close FILE;
my @arr = split('\^',$var);
my $i=0;
foreach (@arr) {
$i++;
open(FILE1,">$i.txt");
print FILE1;
close FILE1;
}
使用严格;
使用警告;
打开(文件“AUTOSAR.txt”);
本地$/;
我的$var=;
关闭文件;
my@arr=split('\^',$var);
我的$i=0;
foreach(@arr){
$i++;
打开(文件1,“>$i.txt”);
打印文件1;
关闭文件1;
}
这里有一个与saiprathapreddy.obula略有不同的答案:
use warnings;
use strict;
my ($file) = @ARGV;
open(my $input, "<$file");
local $/ = "^";
my $i = 0;
while(<>){
chomp;
$i++;
open(my $output, ">file$i.txt");
print $output "$_";
}
使用警告;
严格使用;
我的($file)=@ARGV;
打开(我的$input,“文件$i.txt”);
打印$output“$”;
}
您没有提供足够的信息。您希望如何命名输出文件?为什么要拆分行?匹配^
最简单的方法是$line=~/\^/
。您希望包含^
的行放在旧文件中还是新文件中?或者一部分放在一个文件中,另一部分放在另一个文件中?可以命名文件在任何wa中,比如file1 file2……。我想将我的大文件存储到较小的文件中,文件的断点是“^“这是行将读取此字符的地方,它将中断,其余数据将存储在一个新文件中。此解决方案的问题是它会丢失插入符号字符,但如果存在类似于abc^def^ghi
的行,仍然不清楚其目的是什么。”。您的程序将把abc
放在上一个文件中,然后下一个文件将有defghi
。可以说,应该有另一个文件只包含def
代码>。否则,我认为你的解决方案有效。为了说明这一点,这段代码将整个文件压缩成一个变量$var
,它通过local$/代码>,将行尾字符设置为未定义。然后它在^
上拆分,并将每个片段从0.txt
开始写入一个单独的文件。如果它是一个非常大的文件,唯一需要考虑的是内存占用。此外,只要读入$var
,您就可以关闭文件。
use warnings;
use strict;
my ($file) = @ARGV;
open(my $input, "<$file");
local $/ = "^";
my $i = 0;
while(<>){
chomp;
$i++;
open(my $output, ">file$i.txt");
print $output "$_";
}