将所有 hbase table 名称保存到 bash 数组
Save all hbase table names to the bash array
我想将所有 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
您可以使用 readarray
/mapfile
就好了。但是要删除 duplicates/skip 空行并删除不必要的字符串,您需要使用 awk
.
的过滤器
此外,您不需要创建临时文件然后解析该文件,而是直接使用一种称为进程替换的技术,它允许命令的输出可用,就好像它在临时文件中可用一样
mapfile -t output < <(echo "list" | /path/to/hbase/bin/hbase shell -n | awk '!unique[[=10=]]++ && !/seconds/ && NF')
现在数组将只包含来自 hbase
输出的唯一 table 名称。也就是说,您真的应该查找解决方案以消除查询输出中的噪音,而不是 post-以这种方式处理它。
我想将所有 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
您可以使用 readarray
/mapfile
就好了。但是要删除 duplicates/skip 空行并删除不必要的字符串,您需要使用 awk
.
此外,您不需要创建临时文件然后解析该文件,而是直接使用一种称为进程替换的技术,它允许命令的输出可用,就好像它在临时文件中可用一样
mapfile -t output < <(echo "list" | /path/to/hbase/bin/hbase shell -n | awk '!unique[[=10=]]++ && !/seconds/ && NF')
现在数组将只包含来自 hbase
输出的唯一 table 名称。也就是说,您真的应该查找解决方案以消除查询输出中的噪音,而不是 post-以这种方式处理它。