Сохранить все имена таблиц hbase в массиве bash
Я хотел бы хранить имена всех моих таблиц hbase в массиве внутри моего bash-скрипта.
- Все
sed
Исправления являются приемлемыми. - Все лучшие решения (как
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
выход. Тем не менее, вы должны действительно искать решение, чтобы удалить шум как часть вывода запроса, а не обрабатывать его таким образом.