用Python正则表达式搜索统计命令行管道中的所有数字

由于最近经常要对庞大的Android代码进行统计,于是写了一个Python脚本,可以把命令行中输出的所有管道数据中的数字找出来,并进行累加等操作,使用起来非常快捷高效。

例如,我希望统计Android frameworks目录中所有java/c/cpp/h代码文件的总行数,那么可以这样:

1. 用find命令搜索出所有代码文件:

 

find ./frameworks -iname "*.java" -o -iname "*.cpp" -o -iname "*.h" -o -iname "*.c"


2. 用wc -l命令统计所有搜索出来的代码的行数:

 

 

find ./frameworks -iname "*.java" -o -iname "*.cpp" -o -iname "*.h" -o -iname "*.c" | xargs wc -l

 

上边这个命令行会输出搜索到的每个文件的行数,并且文件数达到一定数量后会输出一个”总用量“。

3. 用grep命令把以上统计输出的带”总用量“的输出行过滤出来:

 

find ./frameworks -iname "*.java" -o -iname "*.cpp" -o -iname "*.h" -o -iname "*.c" | xargs wc -l | grep "总用量"

输出结果:

 

 

  384002 总用量
  725006 总用量
  591547 总用量
  653540 总用量
  666876 总用量
  326548 总用量


4. 用自己写的Python脚本把上边输出的所有数字过滤出来并累加:

 

Python脚本sum_all_numbers.py:

 

#!/usr/bin/python
# coding=utf-8

import sys;
import re

items = []
for name in sys.stdin.readlines(): #从管道中读取每一行数据
  nums = re.findall("\d+ ", name) #用正则表达式找出所有数字
  for num in nums:
    items.append(num)

if(len(items)>0):
    print items

sumNum = 0
for num in items:
  sumNum += int(num) #累加所有数字

print "Total:",sumNum


用这个脚本对命令行管道的输出数据作统计:

 

 

find ./frameworks -iname "*.java" -o -iname "*.cpp" -o -iname "*.h" -o -iname "*.c" | xargs wc -l | grep "总用量" | python ~/scripts/sum_all_numbers.py

输出结果:

 

 

['384002 ', '725006 ', '591547 ', '653540 ', '666876 ', '326548 ']
Total: 3347519


 

 

posted on 2013-08-23 19:28  bbsno  阅读(308)  评论(0编辑  收藏  举报

导航