2008-10-17 44 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開頭的行,並且區分大小寫。