本文介绍了用perl,如何在每行的情况下,选择最后两行有相同的字?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 比尼 -  -21.89753 -20.47853 -20.27835 -18.34952 -16.23454比尼 -  -16.89753 -14.47853 -13.27835 -12.34952 -11.23454比尼 -  -10.09014

我的文件有一个数组如上图所示。
而这个数组开始Bini的是具有多线阵,但我在这里只显示3行。
我想尝试是提取最后两行最后3个元素。
因此,-12.34952 -11.23454 -10.09014这三个要素是,我想。
有时,最后一行可以根据文件具有elments从2至5。但在这里,它已经从最后一行只有1个元素。

我试过如下

 同时(我的$行=<文件>){
     如果($行=〜/比尼/){#extract去年3,2,1元
     我@entries =拆分(/ WS + /,$线);
     $ =中element1(POP @项);
     $ element2的=(POP @项);
     $元素3 =(POP @项);
     }

这样一来,我可以看到中element1是-10.09014,但不幸的是,我无法让元件2和3的元素。
任何人可以帮助我吗? ..


我要保持我原来的剧本。我的意思是,, creaing的日志,这是输出格式的Result.txt开放方法的过程。

#!/usr/bin/perl use warnings; 
use strict; 
use File::stat; 

open (OUT, ">", "result\.txt") or die "cannot open file\,\n"; #from this plx, I want to creat result.txt 

foreach my $answer (glob "*.log") { # format of reading file will be "log" 

open (FILE, "<", "$answer") or die "Cannot open file\.\n"; 
my @file = split ('\.', $answer);

your opening method of file induced error ( my @array = read_file('input.txt')I wonder how can I do using script starting from my $line = 0 from your script.Even though I changed format of txt to log (e.g. input.log), it still gave error message.(read_file 'input.txt' - sysopen: No such file or directory at text.plx line 6)

.....

解决方案

You can take all numbers from every line, push them at the end of @entries, and always keep only last three.

my @entries;
while(my $line = <FILE>) {
     next if $line !~ /Bini/;
     push @entries, grep /\d/, split /\s+/,$line;
     @entries = @entries[-3 .. -1] if @entries > 3;
}
print join "\n", @entries;

output

-12.34952
-11.23454
-10.09014

这篇关于用perl,如何在每行的情况下,选择最后两行有相同的字?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-25 09:34