在我的所有源代码文件中,每个文件的顶部都有一个信息“ header ”,如下所示(Java 中的示例):
/* Project: UVa Online Judge
* Filetype: Java Source Code File
* Filename: generic.java
* Path: compsci/sandbox/uva_online_judge
* Filesize: 1275 bytes
* Date Created: 11/17/2011
* Last Modified: Tue Nov 20, 2012 02:28PM
* LOC: 33
*/
从 BASH 命令行(我在 Cygwin 版本 1.7.16 上使用 GNU bash 版本 4.1.10),我尝试计算特定项目文件夹中所有源文件的总 LOC(代码行)。我将转到顶级项目文件夹(我的一些源代码位于该文件夹的子文件夹中)并运行以下命令:
$ grep -r LOC: *
这给了我以下内容:
generic.c: * LOC: 44
generic.java: * LOC: 33
solved/100/uva_100.java: * LOC: 77
solved/102/uva_102.java: * LOC: 139
solved/108/uva_108.c: * LOC: 94
solved/120/uva_120.java: * LOC: 109
solved/200/uva_200.java: * LOC: 83
solved/414/uva_414.c: * LOC: 61
solved/424/uva_424.c: * LOC: 100
solved/700/uva_700.c: * LOC: 108
solved/900/uva_900.java: * LOC: 54
unsolved/341/uva_341.java: * LOC: 349
但我想修改该 bash 脚本以实际计算总 LOC,假设上面的输出为 1251。
感谢您的帮助!
最佳答案
这是使用 awk
执行此操作的另一种方法:
grep -r LOC: * | awk '{sum+=$NF} END{print sum}'
说明:
grep -r LOC: *
- 你的问题已经显示了它的作用|
将上一步中 grep 的结果通过管道传输到下一个命令awk
调用 awk 工具{sum+=$NF}
:对于每一行,将最后一个字段添加到sum
中。NF
代表 awk 中的字段数,因此$NF
是具有该数字的字段的内容。END{print sum}
:解析完所有行后,打印总和
关于用于计算 LOC 的 BASH 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482736/