Вот интересный способ сделать это vi
(или, на самом деле, ex
если вы пропустите ведущие двоеточия для каждой команды):
:%!awk -F: '{a[$1];print} END {for (i in a) {print i}}'
:v/:/m0
:%!sort -st: -k1,1
:%s/^.*:/\t/
Объяснение:
Команда Awk печатает каждую строку как есть и выводит список всех уникальных первых полей в конце вашего файла.
v
Команда m
Oves на линию 0 (начало файла) все строки , которые не имеют каких - либо двоеточие. (Другими словами, список первых полей, выводимых из awk
.)
Команда sort
выполняет s
сортировку таблиц, сохраняя порядок строк, не располагая их в соответствии с первым полем. (Мы уже переместили поля заголовка в начало файла.)
Затем команда s
ubstitute превращает префикс каждой строки без заголовка во вкладку.
Результат на предоставленной вами информации:
Bug123
SomeComment
SecondComment
Bug222
SomeOtherComment
Дополнительные объяснения:
:
(двоеточие) - это то, что вы вводите, vi
чтобы начать команду ex
-style.
%
диапазон адресов в ex
. Это означает «применить следующее действие / команду ко всем строкам в буфере (файле)».
При использовании с адресом !
начинается «фильтр» в ex
: строки, указанные адресом, подаются в качестве входных данных для указанной внешней команды и заменяются в буфере выходными данными этой команды.
-F:
устанавливает разделитель полей Awk.
{}
(фигурные скобки) используются в Awk для окружения запускаемых команд. Поскольку нет нет Awk адреса предшествующего фигурных скобок (в кавычках) одиночных, действия в фигурных скобках применяются к каждой строке ввода.
a[$1]
создает элемент массива, используя первое поле текущей строки ( $1
) в качестве индекса. Поскольку он не говорит = "whatever"
, элемент массива не имеет значения , но это не имеет значения; мы просто хотим, чтобы массив содержал этот элемент.
;
завершает эту команду Awk.
print
является командой Awk для печати текущей строки (по умолчанию) или любых переданных аргументов (как в последующем print i
).
END
помечает блок действия (в фигурных скобках), который будет выполнен после обработки всего ввода (в Awk).
В for
цикле выводит все индексы массива называется a
. Которые являются дедуплицированными первыми полями файла журнала, в произвольном порядке.
Так много для команды Awk.
Команда v
- это ex
команда, противоположная команде g
lobal. g
выполняет действие на всех линиях, соответствующих определенному шаблону. v
выполняет указанное действие на всех строках, НЕ соответствующих данному шаблону.
/
начинается и заканчивается шаблон. Что только :
в этом случае.
m
означает «двигаться». Таким образом, :v/:/m0
in vi
перемещает все строки, которые не содержат двоеточий, в начало файла.
Остальные команды должны быть довольно понятными. :)
git shortlog
команде.