在 $_ 中找到一个数字并在 perl 中将数据添加到 $_
find a digit in $_ and add data to $_ in perl
我正在尝试使用 Perl 中的文件 I/O 从文件中读取数据。我想找到一个整数,比较它并在行中添加一个整数。我的文件由这样的行组成。
file mfile.txt start_value 0 end_value 13000 errors 30
我想比较 end_value 并想在 end_value 之后添加 500 或 2000。
file mfile.txt start_value 0 end_value 13000 2000 errors 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)
是一个前瞻断言,它匹配 "errors" 开始的地方,但不会替换匹配的部分
? :
是三元运算符,在表达式层面上对应一个if then else
我正在尝试使用 Perl 中的文件 I/O 从文件中读取数据。我想找到一个整数,比较它并在行中添加一个整数。我的文件由这样的行组成。
file mfile.txt start_value 0 end_value 13000 errors 30
我想比较 end_value 并想在 end_value 之后添加 500 或 2000。
file mfile.txt start_value 0 end_value 13000 2000 errors 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)
是一个前瞻断言,它匹配 "errors" 开始的地方,但不会替换匹配的部分? :
是三元运算符,在表达式层面上对应一个if then else