Вот забавный способ сделать это в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
перемещает на строку 0 (начало файла )все строки, в которых нет двоеточия. (Другими словами, список первых полей, выводимых из awk
.)
Команда sort
выполняет сортировку таблицы s
, сохраняя порядок строк, кроме расположения их в соответствии с первым полем. (Мы уже переместили поля «заголовок» в начало файла.)
Затем команда замены s
превращает префикс каждой строки заголовка, отличной от -, во вкладку.
Результат предоставленного вами ввода:
Bug123
SomeComment
SecondComment
Bug222
SomeOtherComment
Дополнительные пояснения:
:
(двоеточие )— это то, что вы вводите в vi
, чтобы начать команду в стиле ex
-.
%
— это диапазон адресов в ex
. Это означает «применить следующее действие/команду ко всем строкам в файле буфера ()».
При использовании с адресом !
начинает «фильтр» вex
:строки, указанные адресом, подаются в качестве входных данных для указанной внешней команды и заменяются в буфере выходными данными этой команды.
-F:
устанавливает разделитель полей Awk.
{}
(фигурные скобки )используются в Awk для окружения команд, которые должны быть запущены. Поскольку перед фигурными скобками (в одинарных кавычках )нет адреса Awk , действия в фигурных скобках применяются к каждой строке ввода.
a[$1]
создает элемент массива, используя первое поле текущей строки($1
)в качестве индекса. Поскольку здесь не указано = "whatever"
, элемент массива не имеет значения , но это не имеет значения; мы просто хотим, чтобы массив содержал этот элемент.
;
завершает эту команду Awk.
print
— это команда Awk для печати текущей строки (по умолчанию )или любых переданных аргументов (, как в более позднемprint i
).
END
помечает блок действий (в фигурных скобках )для выполнения после обработки всех входных данных (в Awk ).
Цикл for
печатает все индексы массива с именем a
. Какие из первых полей файла журнала de -дублируются в произвольном порядке.
Вот вам и команда Awk.
Команда v
— это команда ex
, противоположная общей команде g
. g
выполняет действие над всеми строками, соответствующими определенному шаблону. v
выполняет указанное действие на всех строках, НЕ соответствующих заданному шаблону.
/
запускает и заканчивает шаблон. В данном случае это просто :
.
m
означает «движение». Таким образом, :v/:/m0
в vi
перемещает все строки, не содержащие двоеточий, в начало файла.
Остальные команды должны быть достаточно понятными.:)
Короче говоря, нет.
Если на устройстве должна быть только одна файловая система, Linux не важно, занимает ли файловая система все устройство хранения или раздел на устройстве. Например, допустимо mkfs.ext4 /dev/sdb
; Linux может смонтировать такую файловую систему; Разумеется из командной строки .
НО... будьте очень осторожны с этим. Отсутствие таблицы разделов может помешать правильной работе некоторых инструментов. Например, без таблицы разделов некоторые инструменты разбиения на разделы могут запутаться, поэтому, не найдя таблицу разделов, устройство будет полностью состоять из нераспределенного пространства.
Что касается преимуществ разделения, то оно позволяет размещать более одной файловой системы на устройстве хранения. Хотя эта функция обычно не требуется для внешних устройств хранения, таких как USB-накопители, по моему опыту наличие разделов помогает поддерживать совместимость с различными ОС.
С практической точки зрения, если разбиение на разделы не рекомендуется -для конкретного случая использования, лучше просто разбивать устройства хранения на разделы.