cd
в al oop в каждый подкаталог и обработайте git shortlog
вывод с awk
:
for d in *; do git -C $d shortlog -ens --no-merges; done |
awk '{name_email=""; for (i=2; i<=NF; i++) {name_email=name_email " " $i}; count_by_user[name_email]+=$1} END {for (name_email in count_by_user) print count_by_user[name_email], name_email}'
Сценарий awk
объяснил:
name_email="";
Для каждой строки ввода: начните с пустой переменной name_email
.
for (i=2; i<=NF; i++) {name_email=name_email " " $i};
Объедините все поля, начиная с двух пробелов, в name_email
. Т.е. объедините все поля name + email.
count_by_user[name_email]+=$1
Создайте новый ассоциативный массив count_by_user
и в каждой строке увеличивайте значение (по умолчанию 0) на значение первого поля (количество коммитов).
END {for (name_email in count_by_user) print count_by_user[name_email], name_email}
По окончании распечатки: пропустите count_by_user
индексы (имя + адрес электронной почты), распечатайте рассчитанный счетчик, напечатайте имя + адрес электронной почты. Результаты печатаются несортированными. Может быть отсортировано по самому сценарию awk
или постобработано с | sort -nr
.
Разработано с gawk
версией awk
.