2014-05-06 64 views
1

我有一个包含数行的文本文件,以“#控制点否”开头的字符串和输出最后一个字一个文本文件中的每一行UNIX找到包含这些

我设法得到一个通过做

的grep“#控制点不”

输出只有这些线现在我只想把所有这些线路的最后一个字。

的线条看起来像

“#控制点号39217:1.52520046527084”

所以我想输出只有最后一个数字为1.52520046527084

然后:

最低-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来获取控制点的数量。完美 – Greg