grep tab在perl中分隔了字符串

时间:2014-05-09 15:13:05

标签: perl grep

我正在尝试在类似

的数组中grep制表符分隔的数字(例如1 \ t3)
@data= 
1 3
2 3
1 3
3 3

代码背后的想法是这样的

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

   my @data = ( "1\t3", "2\t3", "1\t3", "3\t3", );
    for (my $i=0;$i<4;$i++) {
        for (my $j=0;$j<4_size;$j++) {
        my $pattern= "$i\t$j";
        my @count=grep(/$pattern/,@data); 
        undef $pattern;
        print "$pattern\tcount\n";
        }
        }

希望输出类似

第1栏和第2栏:模式

第3栏:总比赛次数

1 1
1 2
1 3 2
2 1
2 3 1
3 1 
3 2
3 3 1

但由于某些原因输出为空, 我最近学到了很多有趣的东西。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你几乎得到了它。这是一个工作版本:

#!usr/bin/perl

use strict;
use warnings;

my @data = ( "1\t3", "2\t3", "1\t3", "3\t3", );

foreach my $i (1 .. 3) {
    foreach my $j (1 .. 3) {
        my $pattern = "$i\t$j";
        my $count = grep(/$pattern/, @data);
        print $pattern . ($count ? "\t$count\n" : "\n");
    }
}

答案 1 :(得分:1)

以下代码:

  1. 如果输入包含意外字符(例如'('
  2. ,则不会崩溃
  3. 仅计算"\t"两侧数字序列的完全匹配项。
  4. 使用chomp匹配可能从文件或__DATA__部分读取的行,而不使用\R
  5. -

     #!/usr/bin/env perl
    
     use strict;
     use warnings;
    
     my @data = ( "1\t3", "2\t3", "(\t4", "1\t3", "3\t3", "11\t3" );
    
     for my $i (1 .. 3) {
         for my $j (1 .. 3) {
             my $pattern = "$i\t$j";
             my $count = grep  /\A\Q$pattern\E\R?\z/, @data;
             print join("\t", $pattern, $count ? $count : ''), "\n";
         }
     }
    

    输出:

    1   1
    1   2
    1   3   2
    2   1
    2   2
    2   3   1
    3   1
    3   2
    3   3   1