Автоматически суммировать числовые столбцы и выводить итоговую сумму

Учитывая результат 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 имеет несколько функций, упрощающих задачу, например автоматическое преобразование строки в число , все массивы как ассоциативные массивы, а также возможность перезаписать автоматически разделяемые позиционные параметры и затем распечатать эквивалентные строки.

Есть ли лучший язык для этого хака?

8
задан Ben Jackson 17 November 2010 в 23:51
поделиться