用于计算 LOC 的 BASH 脚本

标签 bash scripting cygwin

在我的所有源代码文件中,每个文件的顶部都有一个信息“ 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/

相关文章:

linux - 从另一个脚本停止正在运行的 bash 脚本

scripting - Photoshop 脚本 - 抑制警告,禁用错误对话框

windows - 从源代码编译 cygwin1.dll

正则表达式以使用 egrep 获取分隔内容

php - Cygwin PHP Windows 10 内存不足

linux - 检查SSH连接和调用函数,执行命令

ruby - 如何在 ruby​​/bash 脚本中杀死生成的子进程

RubyMine 无法识别我的 Ruby 安装路径

linux - Bash -- 查找超过 3 行的文件列表

linux - 在Linux PowerShell和Linux bash中使用 'rm -rf'