在 $_ 中查找一个数字,并在 Perl 中将数据添加到 $_



我正在尝试使用 perl 中的文件 I/O 从文件中读取数据。我想找到一个整数,比较它并在行中添加一个整数。我的文件由这样的行组成。

文件 mfile.txt start_value 0 end_value 13000 错误 30

我想比较end_value,并希望在该end_value之后添加 500 或 2000。

文件 mfile.txt start_value 0 end_value 13000 2000 错误 30

此编辑必须在同一文件中完成。我的代码是这样的。

print "Enter file ";
$file= <STDIN>;
chomp ($file);
open ( DATA, "+<$file") || die "No file";
while(<DATA>) {
print "$_n";    
@line = split / /, $_; 
print "$line[5]";
$epat = $line[5];
if ($epat > 10000) {
$line[6] = "2000 errors";
}
else {
$line[6] = "500 errors";
}
$_ = join (" ", @line);
print "$_";
print "n";
}
close DATA

我尝试将 $_ 转换为数组并通过调用其索引并进行比较来找到end_value。它工作正常,但是如何将此新编辑写入同一文件中的同一行?在此之后,文件不会更改。怎么做?

您可以使用perl -i就地更改文件,但随后需要使用文件名填充@ARGV。无论如何,它会写入另一个文件并在后台重命名它。

实际上,您可以只使用一行:

perl -i~ -ape 's/(?=errors)/$F[5] > 10000 ? "2000 " : "500 "/e' -- filename
  • -i~使用后缀创建文件的备份~
  • -a将每行拆分为@F数组
  • -p逐行读取输入或参数文件,并在处理后打印每一行
  • s///e执行替换,但将替换解释为要运行的代码
  • (?=errors)是一个前瞻断言,它匹配"错误"开始的位置,但不会替换匹配的部分
  • ? :是三元运算符,它对应于表达式级别的if then else

相关内容

最新更新