有时候,想统计下自己项目的代码量,通过与之前的版本相比,可以找出增加、删除、修改的代码量。本文就是为了完成这样的任务。
用到的shell命令:
diff:找出两个版本之间文件的差异
awk:分析diff结果,计算总的代码量
codediff.sh
#!/bin/sh #!/bin/awk function help() { clear echo "Usage:" echo "./sh CurrentDir OriginalDir" exit; } if [ $# -ne 2 ] then help fi diffres=$1"_"$2".diff" diff -PN $1 $2 | sed -n -e ‘/^[[:digit:]]/p‘ > $diffres cat $diffres | awk ‘BEGIN{ FS="\n" x=1 an=0 dn=0 cn=0 msg="" } /a/{ msg=substr($1,index($1,"a")+1) after=substr(msg,index(msg,",")+1) before=substr(msg,0,index(msg,",")-1) if(index(msg,",") == 0) { before=after } an=an+after-before+1 } /c/{ msg=substr($1,0,index($1,"c")-1) after=substr(msg,index(msg,",")+1) before=substr(msg,0,index(msg,",")-1) if(index(msg,",") == 0) { before=after } cn=cn+after-before+1 } /d/{ msg=substr($1,0,index($1,"d")-1) after=substr(msg,index(msg,",")+1) before=substr(msg,0,index(msg,",")-1) if(index(msg,",") == 0) { before=after } dn=dn+after-before+1 } END{ print "add number: "an"\n" print "delete number :"dn"\n" print "modify number :"cn"\n" }‘ rm -rf $diffres
脚本分析:
diff -PN $1 $2 | sed -n -e ‘/^[[:digit:]]/p‘ > $diffres
的结果文件类似于:
0a1,259 0a1,16 1,109d0 1,13d0 9a10,12 17,19d19 2,4c2,3 7c6 16c15 22,23c21,22 1,61d0
a是增加,d是删除,c是修改
下面的awk脚本主要是执行这个文件的分析,/a/分析新增的代码,即a之后的数字差值加1,同理,/c/和/d/完成相同的功能,只是,分析的是c或d之前的两个数字差加1。
该脚本在统计的时候并没有除去注释,如果想除去注释后再统计的话,可以参考http://blog.csdn.net/pngynghay/article/details/21443199在连接博客中,有除去注释的命令,直接拿过来用用就行了。
原文:http://blog.csdn.net/pngynghay/article/details/21467057