2014-05-06 3 views
1

J'ai un fichier texte qui contient un certain nombre de lignes qui commence par « # Point de contrôle No »UNIX trouver toutes les lignes dans un fichier texte contenant une chaîne et la sortie dernier mot de ces

j'ai réussi à obtenir un sortie seulement ces lignes en faisant

grep « # point de contrôle No »

maintenant, je veux seulement garder le dernier mot de toutes ces lignes.

Les lignes ressemblent à

"# point de contrôle No 39217: 1,52520046527084"

Je veux que la sortie les derniers chiffres que 1,52520046527084

puis:

-trouver plus bas valeur

-find valeur la plus élevée

valeur moyenne -calculate

Tout cela, je veux faire est pas tous inclus dans le titre du message, désolé

Merci

+0

Ecrire un petit Perl/Python/Ruby programme pour ce faire? –

Répondre

0

Python est votre ami:

#!/usr/bin/python 

import re, fileinput, sys 

numlines = 0 
lowest = sys.float_info.max 
highest = sys.float_info.min 
total = 0.0 
for line in fileinput.input(): 
    m = re.match(r'# Control Point No (\d+): (.+)', line) 
    if m: 
     value = float(m.group(2)) 
     numlines += 1 
     if value < lowest: 
      lowest = value 
     if value > highest: 
      highest = value 
     total += value 

print "lowest=", lowest, ", highest=", highest, ", average=", (total/numlines) 

$ chmod 0755 procdata.py 
$ ./procdata.py < testdata 
lowest= 1.0 , highest= 67.9 , average= 7.31550797863 
+0

Merci. Une manière simple et impressionnante de le faire. Je ne connais pas Python mais j'ai juste réussi à le faire fonctionner et c'est tellement rapide. – Greg

+0

@Greg Il peut être accéléré en compilant cette expression régulière; Je ne m'embête jamais cependant. – trojanfoe

+0

Je viens d'ajouter, ", Points de contrôle =", numlines à la fin de la ligne d'impression pour obtenir le nombre de points de contrôle. Parfait – Greg

Questions connexes