0

鉴于每条数据记录的代码数据文件内容,我无法打印每条记录的第一行。但是,它会打印第一条记录的第一行,如下所示:1aaaaaaaaaaaa

特别说明:我确信有很多方法可以做到这一点,但就我而言,我需要一个遵循代码问题的解决方案......

记录的数据文件内容

  1aaaaaaaaaa 
  aaaaaaaaaaa 
  aaaaaaaaaaa 
  __Data__ 
  1bbbbbbbbbb 
  bbbbbbbbbbb 
  bbbbbbbbbbb 
  __Data__ 
  1cccccccccc 
  ccccccccccc 
  ccccccccccc 
  __Data__

  { 
      local $/="__Data__\n"; 

      open my $fh,"<","logA.txt" or die "Unable to open file"; 

      while(<$fh>) 
      { 
        # remove the input record separator value of __Data__\n
        chomp; 

        # display the line of each record 
        if(/([^\n]*)\n(.*)/sm) 
        { 
           print "$1\n"; 
        } 
      } 
      close ($fh); 
  } 

我得到了不受欢迎的输出:

  [root@yeti]# perl test2.pl    
  1aaaaaaaaaaaaa
  [root@yeti]#

我需要每条记录的第一行的输出.....

1aaaaaaaaaaa 1bbbbbbbbbbb 1ccccccccccc

4

1 回答 1

2

要进行调试,您会找到程序状态与您的预期不同的地方,然后回溯直到找到原因。

检查程序所做的事情表明您的循环只输入一次并且$_包含整个文件。这意味着 Perl 没有找到行终止符 ( "__Data__\n")。

检查文件发现__Data__和换行符之间有空格。从文件中删除尾随空格。

perl -i -ple's/\s+\z//' logA.txt
于 2013-05-18T18:29:06.320 回答