2008-10-17 45 views
1

没有提取数据输出到data2.txt?代码出了什么问题?如何使用Perl来提取和保存文本?

MYFILE.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; 
+0

使用三个参数打开。 – 2008-10-17 19:20:02

回答

1

当我运行你的代码,但命名改为输入文件My1.txtMyFile.txt我得到了所需的输出 - 空行除外,可以通过从打印语句中删除, "\n"来删除。

+0

对不起,我忘了编辑My1.txt。它应该是MyFile.txt。 – Shiel 2008-10-18 02:56:51

5

这正则表达式是没有意义的:

m/EX$HF|ex$HF/ 

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

此外,在第二行你写的每一个 Perl脚本应该是:

use strict; 

它会用Perl赶上这样的错误,并告诉你他们,而不是默默忽略他们。

+0

......第三个应该是`使用警告'。 – 2008-10-17 19:20:45

+0

他已经在第一行有-w了。 – raldi 2008-10-17 19:42:01

+0

那么他为什么不加上 - 严格的第一行? – 2009-03-18 21:45:40

3
while (<IN>) { 
    if (m/^(EX|ex)\d.*/) { 
    print OUT "$_";  
    print $_; 
    } 
} 
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; 
    } 
} 

是的,总是总是使用严格的;

你也可以格格$线和(如果使用Perl 5.10)说$线而不是打印 “$行\ n”

2

很抱歉,如果这似乎说明出血明显,但有什么错

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

...或者,如果你真的想这样做在Perl(并没有什么不对的):

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

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