准备知识
Shell 数组
#!/bin/bash # author:菜鸟教程 # url:www.runoob.com my_array=(A B "C" D) echo "第一个元素为: ${my_array[0]}" echo "第二个元素为: ${my_array[1]}" echo "第三个元素为: ${my_array[2]}" echo "第四个元素为: ${my_array[3]}"
$ chmod +x test.sh $ ./test.sh 第一个元素为: A 第二个元素为: B 第三个元素为: C 第四个元素为: D
准备调试:
获取表到字符串中:
kkk=`hive -e 'set hive.cli.print.header=false;use ipo;show tables'`;
然后
my_array=($kkk)
查看结果 echo "第一个元素为: ${my_array[0]}" echo "第二个元素为: ${my_array[1]}" echo "第三个元素为: ${my_array[2]}" echo "第四个元素为: ${my_array[3]}"
$ echo "第一个元素为: ${my_array[0]}"
第一个元素为: tab_name
echo "第二个元素为: ${my_array[1]}"
第二个元素为: basic_data_v_o_mobile_info_back_0501
$ echo "第三个元素为: ${my_array[2]}"
第三个元素为: basic_data_v_o_mobile_info_back_0502
$ echo "第四个元素为: ${my_array[3]}"
第四个元素为: basic_data_v_o_mobile_info_back_0503
这里就成功了。
也可以通过,把这个参数关掉:set hive.cli.print.header=false;
代码如下:
#!/bin/bash
kkk=`hive -e 'set hive.cli.print.header=false;use ipo;show tables'`;
my_array=($kkk)
#遍历输出
for(( i=0;i<${#my_array[@]};i++)) do
#${#array[@]}获取数组长度用于循环
echo ${my_array[i]};
done;
kkk=`hive -e 'set hive.cli.print.header=false;use vdm_fms;show create table v_o_invoice;'`;
kkk 变量中有效的信息:COMMENT '发票信息' ROW
#通过 cut 命令进行截取 的时候,分隔符只能是单个字符,所以,先要进行特定替换。
kkk=`echo ${kkk//COMMENT/+}`
kkk=`echo ${kkk//ROW/#}`
echo `cut -d '+' -f 2 $kkk | cut -d '#' -f 1`
好像不科学,有很多commet
待优化
看是否可以通过正则表达式,来进行,特定字符串之间的截取。
#列出所有的包含字符串“13”的文件名
str=`cat dian.txt | grep "13"`
echo cut -d 'COMMENT' -f 2 k | cut -d 'ROW' -f 1
你可以使用linux cut 选取命令。bai
方法:
1. 你把du上面三行写入一个文件中 vim file
2. 测试cut命令 你的zhishell输入:cut -d '=' -f 2 file
解释:dao以=为分隔符,获取第二部分,获取=后面的部分
3. 熟悉cut命令后,你在shell输入
cut -d '=' -f 2 file | cut -d '"' -f 1
解释:第一次执行的输出作为管道命令 | 后面命令的参数。
获取第一个 = 后面的部分,再获取第一个 " 前面的部分。
你可以搜索linux cut命令