-1

我对 perl 非常陌生,并试图弄清楚如何解析制表符分隔文件中的行并将解析行中的值与某个值进行比较,然后打印该行。

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

5.4 6.9 3.1

B 10.2 3.4 7.6

C 1.9 2.6 2.3

我会输出

5.4 6.9 3.1

B 10.2 3.4 7.6

提前致谢

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

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

4

1 回答 1

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
于 2012-06-05T15:31:09.833 回答