【问题标题】:Can perl delete multiple lines in a file?perl可以删除文件中的多行吗?
【发布时间】:2012-11-22 03:05:48
【问题描述】:

我被告知可以使用 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.

【问题讨论】:

  • 这个错误意味着你没有声明$data。你是说my $data = &lt;DATA&gt;; 吗?

标签: perl


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多