2014-05-06 3 views
1

У меня есть текстовый файл, который содержит ряд строк, которые начинаются с «# контрольной точки Нет»UNIX найти каждую строку в текстовый файл, который содержит строку и вывода последнего слова этих

мне удалось получить выход только этих линий, делая

Grep «# Контрольная точка Нет»

Теперь я хочу только, чтобы последнее слово все эти строки.

линии выглядят как

"# Контрольная точка Нет 39217: +1,52520046527084"

Так что я хочу вывести только последние цифры как 1.52520046527084

, а затем:

-find низкий значение

-find наибольшее значение

Высчитайте среднее значение

Все это я хочу сделать, это не все включено в заголовок после, извините

Благодаря

+0

Написать крошечную Perl/Python/Ruby для этого? –

ответ

0

Python является вашим другом:

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

Спасибо. Очень впечатляющий простой способ сделать это. Я не знаю Python, но мне просто удалось заставить его работать, и это так быстро. – Greg

+0

@Greg. Его можно ускорить, скомпилировав это регулярное выражение; Я никогда не беспокоюсь. – trojanfoe

+0

Я только что добавил, «, Control Points =», numlines в конце строки печати, чтобы получить количество контрольных точек. Perfect – Greg

Смежные вопросы