能否在原文件中每一行添加内容

能否在原文件中每一行添加内容

文件 1.txt 内容:
1008 1
1010 2
1133 3


文件 2.txt 内容:
1010 aaa
1008 bbb
1133 ccc

想在文件1.txt中添加匹配的字符串,结果是
原文件 1.txt 内容为:

1008 1 bbb
1010 2 aaa
1133 3 ccc

能不能文件1.txt中每一行后面添加内容?读文件,正则匹配,循环都会实现! 实在没办法我就只能重新设第三个文件来IO了!谢谢大家,
写到一个buffer中再写入原文件?如果文件较小的话可以这么做.


[Copy to clipboard] [ - ]
CODE:
#! /usr/bin/perl

use warnings;
use strict;

my %h;
my $key;
my $value;

open F1 ,"<1.txt";
open F2 ,"<2.txt";
open W ,"+<1.txt";

while ( <F2> ) {
        chomp;
        ( $key ,$value ) = split;
        $h{$key} = $value;
}

while ( <F1> ) {
        chomp;
        ( $key ,$value ) = split;
        print W "$_ $h{$key}\n";
}

truncate ( W ,tell(W) );

学习体会了,真好,谢谢

对于文件1.txt 是不是先用文件句柄F1读一行,然后用文件句柄W覆盖该行,覆盖的内容为$_ $h{$key}\n ,这样依此类推?  我试着体会用:open W ,"+>1.txt"; 为啥1.txt文件最后的结果是什么都没有?     +> 和+<  两种打开文件的模式有什么区别? 查了一下两者的区别,只知道前者是破坏写,后者是无破坏写,没找到具体例子,谢谢解释一下!

用临时文件呗。
还是很迷惑,有人指点一二把!
#!/usr/bin/perl
use warnings;
use strict;
open F1, '<', "1.txt";
open F2, '<', "2.txt";
my (%f1, %f2);
my @f1_ord;
while (<F1>) {
    chomp;
    next unless /^(\d+)\s+\d+/;
    my $id = $1;
    $f1{$id} = $_;
    push @f1_ord, $id;
}
while (<F2>) {
    chomp;
    next unless /^(\d+)\s+(\w+)/;
    my ($id, $str) = ($1, $2);
    $f2{$id} = $str;
}
for my $id (@f1_ord) {
    my $line = $f1{$id};
    if (defined($f2{$id})) {
        $line .= " $f2{$id}"
    }
    print $line, "\n";
}
__END__
__1.txt__
1008 1
1010 2
1133 3

__2.txt__
1010 aaa
1008 bbb
1133 ccc

~
~
如果你的两个文件的内容是一一对应的话,都有相同的 键值 ,比如 1008, 1010 等,

你用 sort/cut/paste 就可以了,连 perl 都用不着。
不是一一对应,很乱,也有重复,例如1010可能还对应bbb,我举的例子不恰当,,没办法,还是用了两个循环嵌套,然后写到三个文件中去了,学习了,谢谢大家