在perl中,如何遍历文件,解析行然后比较行中的值?

时间:2012-06-05 15:12:35

标签: perl parsing

我对perl很新,并试图找出如何解析制表符分隔文件中的行,并将解析后的行中的值与特定值进行比较,然后打印该行。

例如: 我想打印出所有数字大于3的所有行。

  

A 5.4 6.9 3.1

     

B 10.2 3.4 7.6

     

C 1.9 2.6 2.3

我想输出

  

A 5.4 6.9 3.1

     

B 10.2 3.4 7.6

提前致谢

编辑:对不起,我的解释不明确,测试用例不好。我想找到所有数字都大于3的行。

例如:如果我将A行的5.4更改为2.4,我不希望代码打印此行,因为它包含的数字小于3。

1 个答案:

答案 0 :(得分:1)

以下程序将为您完成此操作。它的工作原理是从DATA文件句柄中读取数据,以便将数据合并到程序本身中。要从其他地方读取数据,您必须open来源并从该文件句柄中读取。

每行都会被读入$_系统变量,并使用split分成字段,默认情况下会在空格上拆分$_。这些字段将放入数组@data

grep函数返回通过给定测试的列表元素数。切片@data[1..$#data]是除第一个元素之外的所有@data数组(因为数组索引从零开始)。

如果大于3的元素数不为零,则对print的调用会打印$_

use strict;
use warnings;

while (<DATA>) {
  my @data = split;
  print if grep $_ > 3, @data[1..$#data];
}

__DATA__
A 5.4 6.9 3.1

B 10.2 3.4 7.6

C 1.9 2.6 2.3

<强>输出

A 5.4 6.9 3.1
B 10.2 3.4 7.6