没有提取数据输出到data2.txt?代码出了什么问题?
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 :(得分:5)
这个正则表达式毫无意义:
m/EX$HF|ex$HF/
$ HF应该是变量吗?你想要匹配什么?
此外,您编写的每个 Perl脚本中的第二行应为:
use strict;
它会让Perl抓住这些错误并告诉你它们,而不是默默地忽略它们。
答案 1 :(得分:3)
while (<IN>) {
if (m/^(EX|ex)\d.*/) {
print OUT "$_";
print $_;
}
}
答案 2 :(得分:2)
对不起,如果这似乎说出血明显,但
有什么问题grep -i ^ex < My1.txt > data2.txt
...或者如果你真的想在perl中做(并且没有任何问题):
perl -ne '/^ex/i && print' < My1.txt > data2.txt
这假定请求的目的是查找以EX开头的行,不区分大小写。
答案 3 :(得分:1)
当我运行您的代码时,但是将输入文件命名为My1.txt
而不是MyFile.txt
我得到了所需的输出 - 除了空行,您可以通过删除, "\n"
来删除印刷声明。
答案 4 :(得分: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”。