2016-03-27 9 views
-1

Bitte helfen Sie mir, die numerischen Daten in jeder Zeile einer Datei, zählen und auch die Zeilenlänge zu finden. Der Code muss in Perl geschrieben sein. Zum Beispiel, wenn ich eine Linie haben, wie:So finden Sie die Anzahl der numerischen Daten für jede Zeile in einer Datei

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

Hier beziehen sich die numerischen Daten auf eine Folge von Ziffern wie 1947. –

+0

Beispieleingabe: మోతీలాల్ నెహ్రూ (ఆంగ్లం: Motilal Nehru) (మే 6, 1861 - ఫిబ్రవరి 6, 1931). భారతీయ స్వాతంత్ర్య సమర యోధుడు భారత భారత జాతీయ నాయకుడు. ఇతను, బలీయమైన రాజకీయ కుటుంబ స్థాపకుడు. Ausgabe: 4 (8.1181,6,1931) –

+0

Bitte fügen Sie zusätzliche Informationen in der Frage, nicht in den Kommentaren. Auch die Frage ist unklar. Fragen Sie nach der Anzahl der Zeichen in Ihrer Zeile, die numerisch sind? Oder fragen Sie nach der Anzahl der verschiedenen numerischen Teilstrings, die in einer Zeile enthalten sind? –

Antwort

1

Sie so etwas tun könnte:

perl -ne 'BEGIN{my $x} $x +=() = /[0-9]+/g; END{print($x . "\n")}' file 
  • -n: führt Perl die folgende Schleife um das Programm zu übernehmen, das macht es iteriert über Dateinamenargumente etwas wie sed -n oder awk:

  • -e: kann verwendet werden, um eine Zeile des Programms einzugeben;

  • () wird /[0-9]+/g in Listenkontext ausgewertet werden machen (dh () = /[0-9]+/g wird ein Array zurück, die die Sequenzen von einer oder mehreren Stellen gefunden in dem Standard-Eingabe enthält), während $x += wird das Ergebnis wieder in Skalarkontext ausgewertet machen (dh $x +=() = /[0-9]+/g fügt die Anzahl der Folgen von einer oder mehreren Ziffern in der Standardeingabe zu $x hinzu); END{print($x . "\n") wird $x drucken, nachdem die gesamte Datei verarbeitet wurde.
% 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

Ich mag dieses

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

Die Eingabedatei etwas tun, würde ich getestet -

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 

Der Ausgang als getestet ----

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

Die Verwendung der Regex-Übereinstimmung ([0-9.] +) Stimmt mit jeder Zahl überein und enthält alle Dezimalstellen (ich nehme an, Sie könnten nur ([0-9] +) verwenden, da Sie sie nur zählen und nicht die tatsächlich dargestellte Zahl verwenden .)

Hoffe es hilft.

Verwandte Themen