К сожалению, эта информация отсутствует на справочных страницах, и даже зная, как их читать, (см. ниже )вы столкнетесь с трудностями при попытке найти эту информацию.
Тем не менее, красота открытого исходного кода зависит от возможности читать исходный код. Если вы посмотрите наudev-builtin.c
исходный файл в репозитории systemd
/ udev
и имеете базовые знания языка C , вы найдете следующий фрагмент кода :Структура, которая отображает все существующие встроенные типы.
static const struct udev_builtin *builtins[_UDEV_BUILTIN_MAX] = {
#if HAVE_BLKID
[UDEV_BUILTIN_BLKID] = &udev_builtin_blkid,
#endif
[UDEV_BUILTIN_BTRFS] = &udev_builtin_btrfs,
[UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb,
[UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id,
[UDEV_BUILTIN_KEYBOARD] = &udev_builtin_keyboard,
#if HAVE_KMOD
[UDEV_BUILTIN_KMOD] = &udev_builtin_kmod,
#endif
[UDEV_BUILTIN_NET_ID] = &udev_builtin_net_id,
[UDEV_BUILTIN_NET_LINK] = &udev_builtin_net_setup_link,
[UDEV_BUILTIN_PATH_ID] = &udev_builtin_path_id,
[UDEV_BUILTIN_USB_ID] = &udev_builtin_usb_id,
#if HAVE_ACL
[UDEV_BUILTIN_UACCESS] = &udev_builtin_uaccess,
#endif
};
Этот struct
содержит все встроенные -типы и сопоставляет исходные файлы в зависимости от типа. Пример:
udev-builtin-kmod.c
-Загрузчик модуля ядра. udev-builtin-keyboard.c
-Обработчик клавиатуры. udev-builtin-usb_id.c
-Обработчик USB, который установит тип USB и инициализирует устройство. Похожие:
С любым awk, sort и cut:
$ awk -v OFS='\t' '!pNF{val=$4} {print val, NR, $0; pNF=NF} END{if (pNF) print val, NR+1, ""}' file |
sort -k1,1n -k2,2n |
cut -f3-
PT2 energy = 6.552 eV ( -459.6143027 au) ( 52841.3 cm-1) (R=6)
222u20d0 4->7 : -0.612 (0.374)
2222ud00 5->6 : -0.499 (0.249)
222udud0 4,5-->6,7 : -0.271 (0.074)
R=6 TDM-form-state 1= -0.2916 -0.0544 -2.1475 TDM= 2.17 f: 0.754
PT2 energy = 7.018 eV ( -459.5971543 au) ( 56605.0 cm-1) (R=5)
22u220d0 3->7 : -0.396 (0.156)
222u2d00 4->6 : 0.352 (0.124)
22220ud0 5-->6,7 : 0.326 (0.106)
2222u0d0 5->7 : 0.303 (0.092)
2222u00d 5->8 : 0.271 (0.073)
222ud020 4,5-->7 : 0.267 (0.071)
22u22d00 3->6 : -0.229 (0.052)
R=5 TDM-form-state 1= 0.0860 -0.1785 -0.5446 TDM= 0.58 f: 0.058
PT2 energy = 7.135 eV ( -459.5928710 au) ( 57545.0 cm-1) (R=4)
22u22d00 3->6 : -0.535 (0.286)
22202200 4-->6 : -0.344 (0.119)
222u200d 4->8 : 0.256 (0.065)
222u2d00 4->6 : -0.254 (0.065)
R=4 TDM-form-state 1= 0.2702 -0.2855 -0.5610 TDM= 0.69 f: 0.082
В противном случае используйте только GNU awk для массивов массивов и отсортируйте _в:
awk '
BEGIN { RS=""; ORS="\n\n" }
{ recs[$4][++cnt[$4]] = $0 }
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (val in recs) {
for (i=1; i<=cnt[val]; i++) {
print recs[val][i]
}
}
}
' file
Цикл на cnt[]
таков, что если/когда одно и то же значение (, например.7.135
)появляется несколько раз в 4-м поле для разных входных записей, вывод сохранит порядок ввода для этого значения ключа. В качестве альтернативы вы можете получить тот же результат с конкатенацией строк при чтении ввода, например. все еще использую GNU awk для сортировки _в:
awk '
BEGIN { RS=""; ORS="\n\n" }
{ recs[$4] = recs[$4] $0 ORS }
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (val in recs) {
printf "%s", recs[val]
}
}
' file
Недостаток подхода -только с gawk заключается в том, что они должны хранить весь файл в памяти и не переносятся на системы без gawk. Сценарий awk+sort+cut в верхней части является легко переносимым, и только «сортировка» должна иметь дело со всем файлом сразу, и он предназначен для использования пейджинга по запросу -и т. д. для обработки больших файлов и поэтому гораздо менее вероятен. иметь проблемы с огромным файлом, чем gawk.
sort
ориентирован по линии -. Здесь нужно прочитать файл в «абзацах».
Это можно сделать с помощью очень короткой программы GNU awk:
gawk -v RS= -v ORS='\n\n' '
{section[$4] = $0}
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (key in section) print section[key]
}
' file
Установка переменной RS (разделителя записей )на пустую строку считывает файл с пустыми -записями, разделенными строками. Каждая запись хранится в массиве, индексированном по ключу сортировки.
Волшебная строка PROCINFO указывает gawk сортировать массив численно по индексу во время обхода.