在日常運維工作中,會碰到對一項專案下的程式碼行數進行統計的需求,下面對程式碼行數的統計方法進行梳理,以供參考。
1)最簡單的是使用wc -l直接進行程式碼行數統計。(wc的幾個引數的解釋:-c 統計位元組數;-l 統計行數;-w統計字數)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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指令碼檔案的行數
1
|
[root@huanqiu_web1 main] # find . -name `*.php` | xargs wc -l
|
3)參考一個line-counter的工具
獲取這個工具
1
|
[root@huanqiu_web1 main] # pip install line-counter
|
使用”line”命令可以獲取當前目錄下的檔案與行數統計,效果如下:
1
2
3
4
|
[root@huanqiu_web1 main] # line
Search in /home/www/vote/
file count: 16207
line count: 3785977 |
如果想看到更細節一些的資訊,使用”line -d”命令
1
2
3
4
5
6
7
|
[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工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
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直接對一個檔案內的數字進行求和
1
2
3
4
5
6
7
8
9
10
11
|
[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下多個數求和的幾種寫法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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 |