0

我有一个看起来像这样的文件:

a_12_3_5- k_3_4_6-a_12_3_5-
q_1_5_7_9- q_1_5_7_9-
a_9_4_5-c_3_4_6- c_3_4_6-r_4_5_7-
b_1_1_3- v_1_5_7-
d_12_4_5-e_4_5_6- g_5_6_7-d_6_8_6-
b_1_1_7-f_3_8_7_8-d_4_1_4- d_4_1_5-b_1_1_7-f_3_8_3
b_1_1_7-f_3_8_7_8-d_4_1_4- e_3_3_1-f_3_8_7-f_21_3_1-b_1_1_7-a_1_1_1-

这是一个以空格分隔的文件。出现在空格前后的字符串由较小的子字符串组成,即 b_1_1_3- 、 k_3_4_6- 、 b_12_4_5- 等。我必须检查空格左侧的较小子字符串中有多少包含在出现在空间的右侧。例如:第一行的子字符串 a_12_3_5- 出现在右侧的字符串中。第二行显示与右侧完全匹配。然而,第 3 行显示左侧只有一个子字符串 (c_3_4_6-),它包含在右侧的字符串中。第 4 行和第 5 行表示左侧的子字符串不包含在右侧的字符串中的情况。下一行显示只有一个子字符串 (b_1_1_7-) 包含在右侧的字符串中。最后一行显示有 2 个子字符串 b_1_1_7- 和 f_3_8_7- 包含在右侧的字符串中。因此,有效地,我想看看有多少左侧的子字符串包含在右侧的字符串中。我试图以以下方式获取输出,这样我的文件中的每一行都附加三个数字,即左侧的子字符串数,右侧的子字符串数,左侧的子字符串数包含在右侧。

a_12_3_5- k_3_4_6-a_12_3_5- 1 2 1 
q_1_5_7_9- q_1_5_7_9- 1 1 1
a_9_4_5-c_3_4_6- c_3_4_6-r_4_5_7- 2 2 1
b_1_1_3- v_1_5_7- 1 1 0
d_12_4_5-e_4_5_6- g_5_6_7-d_6_8_6- 2 2 0
b_1_1_7-f_3_8_7_8-d_4_1_4- d_4_1_5-b_1_1_7-f_3_8_3- 3 3 1
b_1_1_7-f_3_8_7_8-d_4_1_4- e_3_3_1-f_3_8_7-f_21_3_1-b_1_1_7-a_1_1_1- 3 5 2

到目前为止,我已经能够获得上述输出,但似乎无法到达该行的最后一部分。我尝试过使用 perl pos 和 index 函数。请帮忙。

4

1 回答 1

0

请试试这个 perl 代码。

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

while ( <DATA> ) {
    my $line = $_;
    chomp $line;
    my ( $left, $right ) = split / /, $line;
    #print "$left\n\t$right\n";
    my @lefts = split /-/, $left;
    my @rights = split /-/, $right;
    my $total = 0;
    foreach ( @rights ) {
        $total++ if $left =~ /$_/;
    }
    print $line, " ", scalar @lefts, " ", scalar @rights, " ", $total, "\n";
}

__DATA__
a_12_3_5- k_3_4_6-a_12_3_5-
q_1_5_7_9- q_1_5_7_9-
a_9_4_5-c_3_4_6- c_3_4_6-r_4_5_7-
b_1_1_3- v_1_5_7-
d_12_4_5-e_4_5_6- g_5_6_7-d_6_8_6-
b_1_1_7-f_3_8_7_8-d_4_1_4- d_4_1_5-b_1_1_7-f_3_8_3
b_1_1_7-f_3_8_7_8-d_4_1_4- e_3_3_1-f_3_8_7-f_21_3_1-b_1_1_7-a_1_1_1-
于 2012-10-08T06:45:59.127 回答