Нужно ли создавать «стандарт разметки» для USB-накопителя, устройства чтения карт памяти или жесткого диска?

Вот забавный способ сделать это вvi(или, на самом деле, в ex, если вы опускаете начальные двоеточия для каждой команды):

:%!awk -F: '{a[$1];print} END {for (i in a) {print i}}'
:v/:/m0
:%!sort -st: -k1,1
:%s/^.*:/\t/

Пояснение:

Команда Awk печатает каждую строку как -и выводит список всех уникальных первых полей в конце вашего файла.

Команда vmперемещает на строку 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перемещает все строки, не содержащие двоеточий, в начало файла.

Остальные команды должны быть достаточно понятными.:)

0
22.08.2019, 18:16
1 ответ

Короче говоря, нет.

Если на устройстве должна быть только одна файловая система, Linux не важно, занимает ли файловая система все устройство хранения или раздел на устройстве. Например, допустимо mkfs.ext4 /dev/sdb; Linux может смонтировать такую ​​файловую систему; Разумеется из командной строки .

НО... будьте очень осторожны с этим. Отсутствие таблицы разделов может помешать правильной работе некоторых инструментов. Например, без таблицы разделов некоторые инструменты разбиения на разделы могут запутаться, поэтому, не найдя таблицу разделов, устройство будет полностью состоять из нераспределенного пространства.

Что касается преимуществ разделения, то оно позволяет размещать более одной файловой системы на устройстве хранения. Хотя эта функция обычно не требуется для внешних устройств хранения, таких как USB-накопители, по моему опыту наличие разделов помогает поддерживать совместимость с различными ОС.

С практической точки зрения, если разбиение на разделы не рекомендуется -для конкретного случая использования, лучше просто разбивать устройства хранения на разделы.

1
28.01.2020, 02:39

Теги

Похожие вопросы