打印每行while read命令的变量

ccgok5k5  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(285)

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

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
vi4fp9gy

vi4fp9gy1#

你也可以这样做

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

fxnxkyjh2#

它看起来像是 show tables ... 命令将有一个单行标题,后跟表名列表。你可以跳过第一行 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

相关问题