1

我想将我所有的 hbase 表的名称存储在我的 bash 脚本中的一个数组中。

  1. 所有sed的修补程序都是可以接受的。
  2. 所有更好的解决方案(比如readarray我不知道的一些zookeeper文件中的)都是可以接受的

MY_TABLE_NAME_1我有两个名为and的hbase 表MY_TABLE_NAME_2,所以我想要的是:

tables = (
  MY_TABLE_NAME_1
  MY_TABLE_NAME_2
)

我尝试了什么:

基于Cloudera 的 OS 脚本中的 HBase Shell

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
4

1 回答 1

1

你可以使用readarray/mapfile就好了。但是要删除重复项/跳过空行并删除不必要的字符串,您需要使用awk.

此外,您不需要创建临时文件然后解析该文件,而是直接使用称为进程替换的技术,该技术允许命令的输出可用,就好像它在临时文件中可用一样

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

现在该数组将仅包含输出中的唯一表名hbase。也就是说,您应该真正寻找解决方案来消除作为查询输出的一部分的噪声,而不是以这种方式对其进行后处理。

于 2018-02-12T10:55:09.470 回答