在日常运维工作中,会碰到对一项项目下的代码行数进行统计的需求,下面对代码行数的统计方法进行梳理,以供参考。
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
|