![](/img/trans.png)
[英]How do I insert a line above specific lines in a file using Vim or Perl?
[英]Perl:How to insert line in a file?
我正在阅读两个文件。 每当第 1 列内容匹配时,我都会尝试从 file2 到 file1 插入一行。
##文件1
1 wr 5769 78670002 fqefq
3 wr 5769 78650003 hfhhg
5 wr 5769 88990001 dfdsv
##文件2
1 Step1
3 Step3
5 Step5
所需的 Output:
1 wr 5769 78670002 fqefq
Step1
3 wr 5769 78650003 hfhhg
Step3
5 wr 5769 88990001 dfdsv
Step5
代码尝试:
my $rk="rk.log";
open(my $tt, "<$rk" ) or die "Could not open file $trk: $!";
while (<$tt>) {
if ($_ =~ /^(\d+)\s+wr\s+5769\s+(\w+)\s+\.*/gm) {
open(p1,"<$temp1") or die "Could not open file $temp1: $!";
while (my $newl = <p1>) {
my @fs1 = split " ", $newl;
if ($fs1[0] eq $1){
print "@fs1\n";
print "step $2\n";
} else {
print "@fs1\n";
}
}
}
}
close p1;
close $tt;
上面的代码没有给出所需的 output。 任何人都可以建议我更好的方法吗?
更新##FILE2
2 Step1
4 Step3
6 Step5
希望一点伪代码足以让您走上正轨。
我相信最简单的方法是将这两个文件导入单独的字符串,然后创建一个循环:
这样,您将按顺序将两个文件中的所有匹配项排序为一个可以导出为文件的字符串。
这对我有用:
use Tie::File;
my $fle1 = $ARGV[0]; my $fle2 = $ARGV[1];
open(FL2, $fle2) || die "Couldn't read file $fle2\: $!\n";
my $flecnt2 = do { local $/; <FL2>; };
close(FL2);
my @array;
tie @array, 'Tie::File', $fle1 || die "Error: Couldn't read and write \"$fle1\" file: $!";
my $str = join "\n", @array;
$str=~s#^([^\s]+)\s(.+)$# my $fulcnt=$&;
if($flecnt2=~m/^$1\s+(.+)$/m)
{
$fulcnt .= "\n$&";
}
($fulcnt);
#egm;
@array = split/\n/, $str;
untie @array;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.