Разобрать lsblk с помощью jq

$ echo machine23,machine094,machine73,machine83 | tr ',' '\n'
machine23
machine094
machine73
machine83

или если вы действительно хотели сделать это в awk (, возможно, потому что вы хотите выполнить дальнейшую обработку в awk):

$ echo machine23,machine094,machine73,machine83 | \
  awk -F',' -v OFS='\n' '{$1=$1;$0=$0;print}'
machine23
machine094
machine73
machine83

Здесь используется хитрый прием awk: если вы измените любое поле (, даже установив его равным самому себе, как в $1=$), а затем установите $0=$0, awk переформатирует всю строку ввода -, заменив исходные разделители полей (FS, запятая в данном случае )с разделителем выходных полей (OFS, новая строка в данном случае ).

0
21.10.2021, 12:07
1 ответ

Чтобы получить имя блочного устройства и каждого из его не -пустых дочерних точек монтирования -в виде табуляции -списка с разделителями:

jq -r '
   .blockdevices[]  | select(.fstype == "crypto_LUKS") as $dev |
    $dev.children[]? | select(.mountpoint | type == "string") as $mp |
    [ $dev.name, $mp.name ] | @tsv'

Поскольку «нулевая точка монтирования -» на самом деле не null, а массив из одного значения null, вместо этого я проверяю, является ли точка монтирования -строкой или нет.

Учитывая данные в вопросе, это вернет

/dev/sdc        /dev/mapper/abc2

Чтобы получить объекты блочного устройства, соответствующие критериям (, если это то, что вы подразумеваете под «весь массив»):

jq '.blockdevices[] |
    select(.fstype == "crypto_LUKS" and
           any(.children[]?;.mountpoint | type == "string"))'

Это возвращает объект блочного устройства, который имеет fstypeзначение crypto_LUKSи имеет по крайней мере один элемент childrenс mountpoint, который является строкой.

Учитывая данные в вопросе, это вернет

{
  "name": "/dev/sdc",
  "fstype": "crypto_LUKS",
  "size": "100G",
  "mountpoint": null,
  "children": [
    {
      "name": "/dev/mapper/abc2",
      "fstype": "btrfs",
      "size": "100GG",
      "mountpoint": "/mnt/test"
    }
  ]
}
4
21.10.2021, 14:02

Теги

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