在平常運維工做中,會碰到對一項項目下的代碼行數進行統計的需求,下面對代碼行數的統計方法進行梳理,以供參考。
1)最簡單的是使用wc -l直接進行代碼行數統計。(wc的幾個參數的解釋:-c 統計字節數;-l 統計行數;-w統計字數)php
1)統計當前目錄下的index.php文件的行數 [root@huanqiu_web1 ~]# cat index.php |wc -l 17 2)統計web目錄下,js文件數量: [root@huanqiu_web1 ~]# find web/ -name "*.js" |wc -l 3)統計web目錄下全部js文件代碼行數: [root@huanqiu_web1 ~]# find web/ -name "*.js" |xargs cat|wc -l 或 wc -l `find web/ -name "*.js"`|tail -n1 4)統計web目錄下全部js文件代碼行數,過濾了空行: [root@huanqiu_web1 ~]# find web/ -name "*.js" |xargs cat|grep -v ^$|wc -l 5)統計web目錄下全部js文件代碼行數。過濾註釋行 [root@huanqiu_web1 ~]# find web/ -name "*.js" |xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l
2)使用find命令統計當前目錄下php腳本文件的行數mysql
[root@huanqiu_web1 main]# find . -name '*.php' | xargs wc -l
3)參考一個line-counter的工具
獲取這個工具linux
[root@huanqiu_web1 main]# pip install line-counter
使用"line"命令能夠獲取當前目錄下的文件與行數統計,效果以下:git
[root@huanqiu_web1 main]# line Search in /home/www/vote/ file count: 16207 line count: 3785977
若是想看到更細節一些的信息,使用"line -d"命令github
[root@huanqiu_web1 main]# line -d Search in /home/www/main/ 31cms/Lib/Action/BackAction.class.php 37 31cms/Lib/Action/BaseAction.class.php 293 31cms/Lib/Action/Home/AdmaAction.class.php 18 31cms/Lib/Action/Home/DataAction.class.php 99 .......
4)使用color工具web
CLOC -- Count Lines of Code 可能你們都知道用 `wc -l` 命令進行代碼行數統計,可是它會將代碼中的註釋、空行所佔用的文本行都統計在內。若是想查看一個 tar 包或一個項目目錄中「實際」的代碼行數而且不肯意本身去寫一個腳原本作此類工做,那麼能夠考慮使用 cloc。 cloc 是一個 perl 腳本,它能夠統計不少種編程語言的代碼文件中的空行、註釋以及實際的代 碼行數。 下載最新版的color 下載地址:https://fossies.org/linux/privat/cloc-1.64.tar.gz/cloc-1.64/cloc 百度雲盤下載地址:https://pan.baidu.com/s/1o7B1vyq 安裝cloc (mac環境下直接使用brew install cloc安裝) [root@huanqiu_web1 ~]# wget https://fossies.org/linux/privat/cloc-1.72.tar.gz [root@huanqiu_web1 ~]# tar -zvxf cloc-1.72.tar.gz [root@huanqiu_web1 ~]# cd cloc-1.72/ [root@huanqiu_web1 cloc-1.72]# make install [root@huanqiu_web1 cloc-1.72]# ls cloc LICENSE README.md sqlite_formatter tests Unix 而後就能夠直接使用cloc命令統計代碼行數了。 好比統計/home/www/main下的代碼行數 [root@huanqiu_web1 cloc-1.72]# ./cloc /home/www/main 8098 text files. 3770 unique files. Complex regular subexpression recursion limit (32766) exceeded at ./cloc line 9262. Complex regular subexpression recursion limit (32766) exceeded at ./cloc line 9262. Complex regular subexpression recursion limit (32766) exceeded at ./cloc line 9262. 4671 files ignored. github.com/AlDanial/cloc v 1.72 T=39.32 s (89.5 files/s, 23469.5 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- PHP 2320 51059 127551 378887 JavaScript 520 23226 23625 156244 CSS 429 15131 3098 113634 HTML 131 2023 415 14150 SQL 71 326 392 9853 Stylus 1 254 6 931 ......... JSON 1 0 0 25 make 2 3 0 15 INI 2 18 64 13 Pascal 1 6 119 2 ------------------------------------------------------------------------------- SUM: 3519 92201 155315 675403 ------------------------------------------------------------------------------- 統計壓縮包代碼行數。好比統計/usr/local/src下的mysql-5.6.34.tar.gz壓縮包的代碼行數 [root@huanqiu_web1 cloc-1.72]# ./cloc /usr/local/src/mysql-5.6.34.tar.gz 14680 text files. 13866 unique files. 10255 files ignored. github.com/AlDanial/cloc v 1.72 T=86.00 s (51.5 files/s, 29614.3 lines/s) --------------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------------- C++ 1161 188519 214211 944511 C 517 36553 40459 458406 C/C++ Header 1389 51498 114913 206832 Java 612 13120 19048 54595 Pascal 103 8820 13805 43968 Perl 141 9513 6423 31054 Bourne Shell 142 4970 5671 27393 ........... lex 3 219 102 524 dtrace 9 96 10 456 Prolog 1 9 40 447 Windows Message File 2 4 17 12 Visual Basic 1 0 0 12 --------------------------------------------------------------------------------------- SUM: 4433 318404 422680 1805749 --------------------------------------------------------------------------------------- 對比壓縮包代碼差別。 [root@huanqiu_web1 cloc-1.72]# ./cloc --diff /usr/local/src/keepalived-1.3.5.tar.gz /usr/local/src/mysql-5.6.34.tar.gz [root@LVS_Backup cloc-1.72]# ./cloc --diff /usr/local/src/keepalived-1.3.5.tar.gz /usr/local/src/mysql-5.6.34.tar.gz 257 text files. 14680 text files. 9565 files ignored. github.com/AlDanial/cloc v 1.72 T=84.00 s (0.0 files/s, 0.0 lines/s) --------------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------------- CSS same 0 0 0 0 modified 0 0 0 0 added 0 0 0 0 removed 1 37 0 141 m4 ........ --------------------------------------------------------------------------------------- SUM: same 0 0 1 1 modified 1 0 30 36 added 4432 318390 422649 1805712 removed 170 7865 8579 47591 ---------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
可使用awk直接對一個文件內的數字進行求和sql
[root@huanqiu ~]# cat a.txt 123 1233 44 55 66 77 88 99 [root@huanqiu ~]# awk 'BEGIN{sum=0}{sum+=$0}END{print sum;}' a.txt 1785
shell下多個數求和的幾種寫法:shell
1) [root@huanqiu ~]# cat sum.sh #!/bin/bash a=5 b=10 c=50 d=100 f=$[ $a+$b+$c+$d ] echo ${f} [root@huanqiu ~]# chmod 755 sum.sh [root@huanqiu ~]# sh sum.sh 165 2) [root@huanqiu ~]# cat sum.sh #!/bin/bash a=5 b=10 c=50 d=100 let "f=a+b+c+d" echo ${f} [root@huanqiu ~]# sh sum.sh 165 3) [root@huanqiu ~]# cat sum.sh #!/bin/bash a=5 b=10 c=50 d=100 ((f=a+b+c+d)) echo ${f} [root@huanqiu ~]# sh sum.sh 165