1

没有提取的数据输出到 data2.txt?代码出了什么问题?

我的文件.txt

ex1,fx2,xx1
mm1,nn2,gg3
EX1,hh2,ff7

这是我在 data2.txt 中想要的输出:

ex1,fx2,xx1
EX1,hh2,ff7


#! /DATA/PLUG/pvelasco/Softwares/PERLINUX/bin/perl -w

my $infile  ='My1.txt';
my $outfile ='data2.txt';

open IN,  '<', $infile  or die "Cant open $infile:$!";
open OUT, '>', $outfile or die "Cant open $outfile:$!";

while (<IN>) {   
  if (m/EX$HF|ex$HF/) {
    print OUT $_, "\n";      
    print $_;   
  }
}

close IN;
close OUT;
4

5 回答 5

5

这个正则表达式没有意义:

m/EX$HF|ex$HF/

$HF 应该是一个变量吗?你想匹配什么?

此外,您编写的每个Perl 脚本的第二行应该是:

use strict;

它会让 Perl 捕捉到这些错误并告诉你它们,而不是默默地忽略它们。

于 2008-10-17T07:10:53.010 回答
3
while (<IN>) {
  if (m/^(EX|ex)\d.*/) {   
    print OUT "$_";      
    print $_;   
  }
}
于 2008-10-17T07:12:22.787 回答
2

抱歉,如果这似乎表明流血很明显,但有什么问题

grep -i ^ex < My1.txt > data2.txt

...或者如果您真的想在 perl 中执行此操作(这并没有错):

perl -ne '/^ex/i && print' < My1.txt > data2.txt

这假设请求的目的是查找以 EX 开头的行,不区分大小写。

于 2008-10-18T08:03:45.867 回答
1

文件名不匹配。

open(my $inhandle, '<', $infile)   or die "Cant open $infile: $!";
open(my $outhandle, '>', $outfile) or die "Cant open $outfile: $!";

while(my $line = <$inhandle>) {   

    # Assumes that ex, Ex, eX, EX all are valid first characters
    if($line =~ m{^ex}i) {         # or   if(lc(substr $line, 0 => 2) eq 'ex') {
        print { $outhandle } $line;      
        print $line;
    }
}

是的,总是 使用严格的;

你也可以chomp $line并且(如果使用 perl 5.10)说 $line而不是print "$line\n"

于 2008-10-17T17:58:06.040 回答
1

当我运行您的代码时,但命名输入文件My1.txt而不是MyFile.txt我得到所需的输出 - 除了空行,您可以通过, "\n"从 print 语句中删除来删除。

于 2008-10-17T07:05:11.337 回答