0

我被告知可以使用 perl 从我拥有的文本文件中删除行。但是,我对 perl 的经验非常简短。

我需要匹配从第二个文件获得的文本文件中的一个数字,然后从第一个文件中删除该行及其后的下一个 2,然后跳到下一个匹配的数字,依此类推。我试图匹配的数字将在一个范围内。这可能吗?或者在实际脚本中包含要匹配的数字而不是在第二个文件中是否更容易,例如在 -

__DATA__
23-28
47-55
108-139
etc

某种格式?

任何帮助或方向将不胜感激。

提前谢谢了。

*对不起,我可能应该从我所做的开始,我已经尝试过这段代码:”

#!/usr/bin/env perl 

use strict; 
use warnings; 

my $number = <DATA>; 

open( FILE, "<MGE.txt" ); 
my @LINES = <FILE>; 
foreach my $LINE ( @LINES ) { 
    print FILE $LINE unless ( $LINE =~ m/$data/ ); 
} 
close( FILE ); 
}
__DATA__
34163-51525
80765-83026
137322-138041
141474-142274
315945-318143
etc...

但是,我收到 -

Global symbol $data requires explicit package name.
4

1 回答 1

1

您的尝试存在一些问题:

  1. FILE只开放阅读,所以你将无法阅读print
  2. 在所有的行中啜饮之后FILE将在文件的末尾。

沿着您的原始代码的解决方案:

open(FILE, "<", "MGE.txt") or die "open read failed: $!";
my @LINES = <FILE>;
# reopen FILE for writing
open(FILE, ">", "MGE.txt") or die "open write failed: $!"
for my $LINE (@LINES) {
  print FILE $LINE if ...;
}
close(FILE);

另一种标准方法是使用Tie::File模块 - http://perldoc.perl.org/Tie/File.html

于 2012-11-21T19:05:48.610 回答