Сопоставить вывод таблицы bash с массивом

#arrays #bash #shell #sh #filemap

#массивы #bash #оболочка #sh #файловая карта

Вопрос:

Как я могу сопоставить значения, полученные из имени столбца, с массивом, который я могу позже использовать в своем скрипте bash?

  ------------------------------ ---------- ----------- --------- 
| name                         | status   | update    | version |
 ------------------------------ ---------- ----------- --------- 
| enable-jquery-migrate-helper | inactive | none      | 1.0.1   |
| gravityforms                 | inactive | none      | 2.4.17  |
| gutenberg                    | inactive | none      | 8.8.0   |
| redirection                  | inactive | none      | 4.8     |
| regenerate-thumbnails        | inactive | none      | 3.1.3   |
| safe-svg                     | inactive | none      | 1.9.9   |
| weglot                       | inactive | none      | 3.1.9   |
| wordpress-seo                | inactive | available | 14.8    |
 ------------------------------ ---------- ----------- --------- 
  

Я уже пробовал следующее, но это позволило бы сохранить только название заголовков в таблице:

 IFS=$'n' read -r -d '' -a my_array < <( wp plugin list  --status=inactive --skip-plugins  amp;amp; printf '' )
  

echo $my_array

  name status update version
  

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

Комментарии:

1. В оболочке нет многомерных массивов. Как вы собираетесь отобразить 2D-таблицу в массив Bash?

2. @JeroenSmink : Я не понимаю, как должен выглядеть результирующий массив в вашем случае, но, похоже, ваша главная задача здесь — проанализировать входную строку, а не создавать массив. Поскольку ваши поля имеют одинаковый размер для каждой строки, вы могли бы использовать простой выбор подстроки. В качестве альтернативы, вы могли бы сопоставить шаблон для разделителя столбцов, который, по-видимому, представляет собой вертикальную полосу.

Ответ №1:

Лучше использовать формат вывода CSV, а не формат таблицы по умолчанию, если вы намереваетесь отобразить результат с помощью командной строки или скрипта awk:

 wp plugin list --status=inactive --skip-plugins --format=csv
  

который будет выводить это:

 name,status,update,version
enable-jquery-migrate-helper,inactive,none,1.0.1
gravityforms,inactive,none,2.4.17 
gutenberg,inactive,none,8.8.0
redirection,inactive,none,4.8
regenerate-thumbnails,inactive none,3.1.3
safe-svg,inactive,none,1.9.9
weglot,inactive,none,3.1.9
wordpress-seo,inactive,available,14.8
  

Комментарии:

1. @JeroenSmink Не пропустите --format=json , это было бы красиво и надежно обработано любым синтаксическим анализатором JSON на разных языках, таких как: python, perl или даже jq для оболочки.

2. Да, я добавляю пакет JQ в свой образ Docker, пока мы говорим. уже найден отличный способ отфильтровать значения с помощью ключа name