统计代码行数的方法梳理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

在日常运维工作中,会碰到对一项项目下的代码行数进行统计的需求,下面对代码行数的统计方法进行梳理,以供参考。
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,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
缓存 C语言 C++
【项目日记(九)】项目整体测试,优化以及缺陷分析
【项目日记(九)】项目整体测试,优化以及缺陷分析
|
SQL 安全 关系型数据库
项目实战典型案例7——在线人员列表逻辑混乱反例
项目实战典型案例7——在线人员列表逻辑混乱反例
154 0
项目实战典型案例7——在线人员列表逻辑混乱反例
|
6月前
|
人工智能 算法 测试技术
【简历优化平台-03】轻字段信息的合理性及单独算法
【简历优化平台-03】轻字段信息的合理性及单独算法
|
6月前
|
监控 项目管理
第八章项目进度管理(选择4分,案例12分)
第八章项目进度管理(选择4分,案例12分)
144 0
|
SQL 安全 Java
【项目实战典型案例】07.在线人员列表逻辑混乱反例
【项目实战典型案例】07.在线人员列表逻辑混乱反例
|
SQL 安全 算法
项目实战7——在线人员列表逻辑混乱反例
项目实战7——在线人员列表逻辑混乱反例
85 0
|
程序员 测试技术 API
统计千行代码Bug率,有没有意义?
统计千行代码Bug率,有没有意义?
942 0
|
XML 前端开发 JavaScript
项目代码行数统计
了解代码统计的几种方式
908 0
项目代码行数统计
|
监控 测试技术 程序员
关于烂代码的那些事 – 评价代码优劣的方法
秦迪,微博研发中心技术专家,2013 年加入微博,负责微博平台通讯系统的设计和研发、微博平台基础工具的开发和维护,并负责微博平台的架构改进工作,在工作中擅长排查复杂系统的各类疑难杂症。
1240 0