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

时间:2012-06-05 16:25:08

标签: perl parsing

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

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

  

A 2.4 6.9 3.1

     

B 10.2 3.4 7.6

     

C 1.9 2.6 2.3

我想输出

  

B 10.2 3.4 7.6

因为B是所有数字大于3的唯一行

提前致谢

2 个答案:

答案 0 :(得分:3)

  • 使用Text :: CSV CPAN模块将制表符分隔的文件解析为数组数组

  • 循环遍历所有记录。对于每条记录

    • 检查字段1,2和3是否大于阈值。对于3个字段,使用简单的“if”,对于大量字段,请使用grep

    • 如果所有字段都较大,请将记录打印到STDOUT

答案 1 :(得分:1)

您可以使用splithttp://perldoc.perl.org/functions/split.html

假设您已将文件中的一行读入$inString,您可以使用:

($letter, $n1, $n2, $n3) = split('\t', $inString);

(模式的'\ t'是制表符。)

然后检查$ n1,$ n2和$ n3是否都大于3,如果是,则打印$inString

这也假设您在每一行上都有一定数量的值(在您的示例中为三个)。如果情况并非总是这样,您可以将split的返回值放入数组并检查除第一个之外的所有元素。