【问题标题】:Print variable with each line of while-read command使用 while-read 命令的每一行打印变量
【发布时间】:2017-08-11 14:43:30
【问题描述】:

我正在尝试设置一个监控脚本,该脚本将获取我们拥有的所有数据库、显示表格并对其进行一些算术运算。
我有这个命令:

impala-shell -i impalad -q " show databases;" -B  | while read a; do impala-shell -q "show tables in ${a}" -B -i impalad; done

产生以下输出:

Query: show tables in database1
table1
table2

我应该如何格式化输出以显示每个表的数据库名称($a)?我试着回应它或||但这只会在显示所有表格后打印数据库名称。或者有没有办法将变量传递给 awk?
所需的输出如下所示:

database1.table1
database1.table2

【问题讨论】:

    标签: sql bash shell impala


    【解决方案1】:

    看起来show tables ... 命令的输出将有一个 1 行标题,然后是表名列表。 您可以通过管道到tail -n +2 跳过第一行, 然后使用另一个while 循环以所需格式回显数据库名称和表名称对:

    impala-shell -i impalad -q " show databases;" -B  | while read a; do
        impala-shell -q "show tables in ${a}" -B -i impalad | tail -n +2 | while read table; do
            echo $a.$table
        done
    done
    

    【讨论】:

      【解决方案2】:

      你也可以

      impala-shell -q ... | awk -v db="$a" 'NR > 1 {print db "." $0}'
      

      【讨论】:

      • 或者你可以使用 sed 如下:
      • Impala-shell -q ... | sed s/^/$a/
      • 也许你的意思是sed "s/^[[:blank:]]*/$a./"
      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 2017-01-28
      • 2015-09-28
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多