【发布时间】:2015-01-09 14:08:13
【问题描述】:
这是我的问题,假设我有一个文件
file1.txt 内容:
abc..
def..
ghi..
def..
第二个文件file2.txt 的内容:
xxx..
yyy..
zzz..
现在我想将file1.txt中以“def”开头的所有行复制到file2.txt,并在file2.txt中的“yyy...”行之后追加
预期输出:
xxx...
yyy...
def...
def...
zzz...
我对 perl 很陌生,我尝试为此编写简单的代码,但最终输出只附加在文件末尾
#!/usr/local/bin/perl -w
use strict;
use warnings;
use vars qw($filecontent $total);
my $file1 = "file1.txt";
open(FILE1, $file1) || die "couldn't open the file!";
open(FILE2, '>>file2.txt') || die "couldn't open the file!";
while($filecontent = <FILE1>){
if ( $filecontent =~ /def/ ) {
chomp($filecontent);
print FILE2 $filecontent ."\n";
#print FILE2 $filecontent ."\n" if $filecontent =~/yyy/;
}
}
close (FILE1);
close (FILE2);
perl 程序的输出是
xxx...
yyy...
zzz...
def...
def...
【问题讨论】:
-
您正在使用
>>打开file2。因此,您会将输出附加到file2的末尾。因此,一种方法是:打开file3。复制从file2到yyy...的所有内容。然后使用您的while语句,然后将file2的其余部分复制到file3。 -
不鼓励使用
use vars。您应该使用my在此处声明变量,而不是使用全局变量,而是在尽可能小的范围内声明变量,最好是在使用它们的位置。例如。while (my $filecontent = <FILE1>). -
你的文件有多大?
标签: perl