如何查找文件中每一行的数字数据

时间:2016-03-27 13:20:22

标签: text-processing perl

请帮我计算文件各行的数值数据, 并找到线长。代码必须用Perl编写。 例如,如果我有一行如:

INPUT:I was born on 24th october,1994.
Output:2

2 个答案:

答案 0 :(得分:1)

你可以这样做:

perl -ne 'BEGIN{my $x} $x += () = /[0-9]+/g; END{print($x . "\n")}' file
  • -n:导致Perl假定你的程序有以下循环,这使得它迭代文件名参数,有点像sed -n或awk:

    LINE:
      while (<>) {
          ...             # your program goes here
      }
    
  • -e:可用于输入一行程序;

  • ()将在列表上下文中评估/[0-9]+/g(即() = /[0-9]+/g将返回一个包含默认输入中找到的一个或多个数字序列的数组),而{{1}将在标量上下文中再次计算结果(即$x +=将在默认输入中找到的一个或多个数字的序列数添加到$x += () = /[0-9]+/g);在整个文件处理完毕后,$x将打印END{print($x . "\n")
$x

答案 1 :(得分:0)

我做这样的事情

#!/usr/bin/perl

use warnings;
use strict;

my $file = 'num.txt';

open my $fh, '<', $file or die "Failed to open $file: $!\n";

while (my $line = <$fh>){
    chomp $line;
    my @num = $line =~ /([0-9.]+)/g;
    print "On this line --- " .scalar(@num) . "\n";
}
close ($fh);

我测试的输入文件 -

This should say 1
Line 2 should say 2
I want this line to say 5 so I have added 4 other numbers like 0.02 -1 and 5.23

测试的输出----

On this line --- 1
On this line --- 2
On this line --- 5

使用正则表达式匹配([0-9。] +)将匹配任意数字并包含任何小数(我猜你真的只能使用([0-9] +),因为你只计算它们而不使用实际上是数字代表。)

希望它有所帮助。