我想将所有hbase表的名称存储在bash脚本中的数组中。
sed
个修补程序均可接受。readarray
来自某些我不知道的zookeeper文件)都可以接受我有两个名为MY_TABLE_NAME_1
和MY_TABLE_NAME_2
的hbase表,所以我想要的是:
tables = (
MY_TABLE_NAME_1
MY_TABLE_NAME_2
)
我尝试了什么:
基于HBase Shell in OS Scripts by 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
答案 0 :(得分:1)
您可以使用readarray
/ mapfile
就好了。但要删除重复项/跳过空行并删除不必要的字符串,您需要使用awk
过滤器。
此外,您不需要创建临时文件然后解析该文件,但是直接使用称为进程替换的技术,该技术允许输出命令,就像它在临时文件中可用一样
mapfile -t output < <(echo "list" | /path/to/hbase/bin/hbase shell -n | awk '!unique[$0]++ && !/seconds/ && NF')
现在,数组将只包含hbase
输出中的唯一表名。也就是说,您应该真正查找解决方案,将查询输出中的噪声移除,而不是以这种方式对其进行后处理。