将所有hbase表名保存到bash数组中

时间:2018-02-12 10:25:32

标签: bash sed hbase hbase-shell

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

  1. 所有sed个修补程序均可接受。
  2. 所有更好的解决方案(如readarray来自某些我不知道的zookeeper文件)都可以接受
  3. 我有两个名为MY_TABLE_NAME_1MY_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
    

1 个答案:

答案 0 :(得分:1)

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

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

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

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