Ben*_*son 8 language-agnostic awk code-golf
鉴于以下产出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(-)
Run Code Online (Sandbox Code Playgroud)
我想生成数字列的总和,但保留行的格式. 为了通用性,我制作了这个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
}
Run Code Online (Sandbox Code Playgroud)
产量:
44 files changed, 1080 insertions(+), 338 deletions(-)
Run Code Online (Sandbox Code Playgroud)
Awk有几个简化问题的功能,如自动字符串 - >数字转换,所有数组作为关联数组,以及覆盖自动拆分位置参数然后打印等效行的功能.
这个黑客有更好的语言吗?
灵感来自ChristopheD的awk解决方案.与-an命令行开关一起使用.43个字符+ 4个字符用于命令行开关:
$i-=@a=map{($b[$i++]+=$_)||$_}@F}{print"@a"
Run Code Online (Sandbox Code Playgroud)
我可以-ap通过一点点作弊来达到45(41 + 开关):
$i=0;$_="Ctrl-M@{[map{($b[$i++]+=$_)||$_}@F]}"
较旧的,基于散列的66字符解决方案:
@a=(),s#(\d+)(\D+)#$b{$a[@a]=$2}+=$1#gefor<>;print map$b{$_}.$_,@a
Run Code Online (Sandbox Code Playgroud)