統計程式碼行數的方法梳理

吞吞吐吐的發表於2017-09-14

在日常運維工作中,會碰到對一項專案下的程式碼行數進行統計的需求,下面對程式碼行數的統計方法進行梳理,以供參考。
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
***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************
本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6768005.html,如需轉載請自行聯絡原作者


相關文章