我正在编写脚本来读取大文件(> 10 GB),并将数据中的数据写入该文件中每行的末尾。这是我的代码
my $count=0;
while(my $lines = <$FILE>){
seek $FILE, length($lines), 1;
print $FILE "\t", $array[$count];
$count++;
}
但我认为使用搜索方法找到行尾是错误的。我无法理解这一点。任何人都可以在这段代码中看到错误。在处理之前..
my 1st line
my 2nd line
my 3rd line
处理后......
my 1st line data1
my 2nd line data2
my 3rd line data3
data1,data2,data3在@array中。
代码详情:
的问题:
谢谢,
罗宾
答案 0 :(得分:2)
你做不到。寻找文件中的某个位置然后打印到该位置会覆盖该位置的数据。
我建议您使用Tie::File
,它允许您将文件的内容作为数组进行访问,因此只需将字符串添加到其中一个元素中即可附加到文件行的末尾。数组。
代码看起来像这样。请注意,创建@newdata
的行仅用于测试。它会创建一个与文件长度相同的数组,其中包含data1
,data2
等行,就像您的问题一样。
您最初应该在较小的文件上对此进行测试,因为处理15GB文件需要一段时间,并且还会覆盖它,因此如果您有任何错误,则会破坏您的数据。
use strict;
use warnings;
use Tie::File;
use Fcntl 'O_RDWR';
tie my @file, 'Tie::File', 'myfile', mode => O_RDWR or die $!;
my @newdata = map sprintf('data%d', $_ + 1), 0 .. $#file;
my $i = 0;
for my $line (@file) {
$line .= "\t" . $newdata[$i];
++$i;
}
untie @file;