2016-03-27 5 views
-1

ファイルの各行の数値データを計算して、 の行の長さを調べてください。コードはPerlで書かれていなければなりません。例えば 私のような行がある場合:あなたはこのような何かを行うことができファイル内のすべての行の数値データの検索方法

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

ここで数値データは、1947年のような一連の数字を指します。 –

+0

サンプル入力:Motilal Nehru(మే6、1861 - 1931年6月6日)。あなたのために必要なものはありませんか?あなたは、あなたの人生を変えることができます。出力:4(8,1861,6,1931) –

+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:1行のプログラムを入力するために使用できます。 $x +=結果がスカラコンテキストで再度評価されるようになりますしながら

  • ()/[0-9]+/gを行いますが、リストコンテキストで評価される(すなわち、$x +=() = /[0-9]+/g(すなわち() = /[0-9]+/gは、デフォルトの入力に見られる1桁以上の数字の配列を含む配列を返します)デフォルトの入力で見つかった1つ以上の数字のシーケンスの数を$xに追加します。 END{print($x . "\n")は、ファイル全体が処理された後に$xを出力します。私はこの

    #!/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); 
    

    のように、私がテストした入力ファイル何かをしたい

% cat file 
string 123 string 1 string string string 
456 string 
% perl -ne 'BEGIN{my $x} $x +=() = /[0-9]+/g; END{print($x . "\n")}' file 
3 
% 
0

- テストとして

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)+を使うことができます) 。)

希望します。