Сохранить все имена таблиц hbase в массиве bash

Я хотел бы хранить имена всех моих таблиц hbase в массиве внутри моего bash-скрипта.

  1. Все sed Исправления являются приемлемыми.
  2. Все лучшие решения (как readarray это из какого-то файла zookeeper я не в курсе) приемлемы

У меня есть две таблицы hbase под названием MY_TABLE_NAME_1 а также MY_TABLE_NAME_2Итак, что я хочу:

tables = (
  MY_TABLE_NAME_1
  MY_TABLE_NAME_2
)

Что я пробовал:

Основываясь на HBase Shell в ОС Scripts от Cloudera:

echo "list" | /path/to/hbase/bin/hbase shell -n > /home/me/hbase-tables
readarray -t tables < /home/me/hbase-tables

но внутри моего /home/me/hbase-tables является:

MY_TABLE_NAME_1
MY_TABLE_NAME_2
2 row(s) in 0.3310 seconds

MY_TABLE_NAME_1
MY_TABLE_NAME_2

1 ответ

Решение

Вы могли бы использовать readarray/mapfile просто хорошо. Но чтобы удалить дубликаты / пропустить пустые строки и удалить ненужные строки, вам нужен фильтр, использующий awk,

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

mapfile -t output < <(echo "list" | /path/to/hbase/bin/hbase shell -n | awk '!unique[$0]++ && !/seconds/ && NF')

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

Другие вопросы по тегам