1

我正在尝试使用 grep 和正则表达式在 bash 中获取配置单元表的分区列名称。我正在尝试这个:

hive -e 'show create table employees'  | grep -E 'PARTITIONED BY (.*)'

这给了我这样的结果:PARTITIONED BY (

我如何修改我的命令来获取这部分:

PARTITIONED BY ( year char(4), month char(2))

我的最终目标是将所有分区列抓取到变量或数组中,以便我以后可以使用它们。如果有更好的方法来实现我想要做的事情,我也愿意接受。

任何帮助,将不胜感激。

谢谢你。

4

1 回答 1

1

您可以使用

hive -e 'describe formatted employees' | \
  awk '/Partition/{p=1; next} /Detailed/{p=0} p' | \
    grep -oE '^[[:alnum:]_]+'

describe formatted employees将产生描述表格的更好格式输出, awk '/Partition/{p=1; next} /Detailed/{p=0} p'将提取匹配行之间PartitionDetailed不包括匹配行的文本块,grep -oE '^[[:alnum:]_]+'并将仅获取位于行首且仅包含字母或数字的那些单词。如果只能是字母,请替换[:alnum:][:alpha:].

于 2019-10-10T14:53:20.440 回答