Perl:将一个文件中的数字附加到第二个文件的字符串

时间:2015-01-09 12:35:48

标签: string perl unicode pattern-matching

我想将一个文件中附加到(Unicode)字符串的数字附加到第二个文件中的匹配字符串。不知何故,我无法解决如何做到这一点。这是我的两个文件的样子。

文件1:

दौरा, 2
प्रोत्साहन, 1
प्रगति, 4

文件2:

दौरा
dorA

प्रोत्साहन
prua2ts3Ahan
prua2ts2Ahan
prua2tsAhan
prua2t2s3Ahan
prua2t2s2Ahan
prua2t2sAhan
prOts3Ahan
prOts2Ahan
prOtsAhan
prOt2s3Ahan
prOt2s2Ahan
prOt2sAhan

प्रगति
praGat2I
praGatI
pragat2I
pragatI

期望的结果如下所示:

输出:

dorA, 2

prua2ts3Ahan, 1
prua2ts2Ahan, 1
prua2tsAhan, 1
prua2t2s3Ahan, 1
prua2t2s2Ahan, 1
prua2t2sAhan, 1
prOts3Ahan, 1
prOts2Ahan, 1
prOtsAhan, 1
prOt2s3Ahan, 1
prOt2s2Ahan, 1
prOt2sAhan, 1

praGat2I, 4
praGatI, 4
pragat2I, 4
pragatI, 4

我有一个从文件1创建的哈希,它将字符串作为键,数字作为值。现在需要在文件2中匹配这些键,在匹配后收集所有后续行,并将值附加到后面的行。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您对解决方案的描述是正确的。现在只需将其翻译为代码:

#!/usr/bin/perl
use warnings;
use strict;

my %hash;

open my $F1, '<:encoding(UTF-8)', 'file.1' or die $!;
while (<$F1>) {
    chomp;
    my ($word, $num) = split /, /;
    $hash{$word} = $num;
}

open my $F2, '<:encoding(UTF-8)', 'file.2' or die $!;
my $word;
while (<$F2>) {
    chomp;
    if (exists $hash{$_}) {
        $word = $_;
    } elsif ($_) {
        print "$_, $hash{$word}\n";
    } else {
        print "\n";
    }
}