【发布时间】:2010-11-17 23:51:55
【问题描述】:
给定git ... --stat的输出:
3 files changed, 72 insertions(+), 21 deletions(-)
3 files changed, 27 insertions(+), 4 deletions(-)
4 files changed, 164 insertions(+), 0 deletions(-)
9 files changed, 395 insertions(+), 0 deletions(-)
1 files changed, 3 insertions(+), 2 deletions(-)
1 files changed, 1 insertions(+), 1 deletions(-)
2 files changed, 57 insertions(+), 0 deletions(-)
10 files changed, 189 insertions(+), 230 deletions(-)
3 files changed, 111 insertions(+), 0 deletions(-)
8 files changed, 61 insertions(+), 80 deletions(-)
我想生成数字列的总和,但保留行的格式。 为了方便起见,我制作了这个 awk 脚本,它自动对任何数字列求和并生成一个摘要行:
{
for (i = 1; i <= NF; ++i) {
if ($i + 0 != 0) {
numeric[i] = 1;
total[i] += $i;
}
}
}
END {
# re-use non-numeric columns of last line
for (i = 1; i <= NF; ++i) {
if (numeric[i])
$i = total[i]
}
print
}
产量:
44 files changed, 1080 insertions(+), 338 deletions(-)
Awk 有几个可以简化问题的特性,例如自动字符串->数字转换、所有数组作为关联数组,以及覆盖自动拆分位置参数然后打印等效行的能力。
对于这个 hack 有更好的语言吗?
【问题讨论】:
-
这确实变成了一个有趣的代码高尔夫问题,但我觉得我应该问你在这里想要完成什么。您的“X 文件已更改”行是否来自 git log?如果是这样,如果您在多个变更集中更改了同一个文件,那么简单地将更改的文件数相加是不准确的。如果你想找出两点之间发生了什么,你可能需要 git diff --stat
. -
@Mike:“X 文件已更改”肯定是错误的,其他总数接近我想要的。有问题的修订不是完全按顺序进行的。
标签: language-agnostic awk code-golf