我对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。
答案 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