使用 while-read 命令的每一行打印变量
Print variable with each line of while-read command
我正在尝试设置一个监控脚本,它将获取我们拥有的所有数据库,显示 tables 并对其进行一些算术运算。
我有这个命令:
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
我应该如何格式化输出以显示每个 table 的数据库名称 ($a)?我试着回应它或||但这只会在显示所有 table 之后打印数据库名称。或者有没有办法将变量传递给 awk?
所需的输出如下所示:
database1.table1
database1.table2
看起来 show tables ...
命令的输出将包含 1 行 header,后跟 table 名称列表。
您可以通过管道输入 tail -n +2
来跳过第一行,
然后使用另一个 while
循环以所需格式回显数据库名称和 table 名称对:
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
你也可以
impala-shell -q ... | awk -v db="$a" 'NR > 1 {print db "." [=10=]}'
我正在尝试设置一个监控脚本,它将获取我们拥有的所有数据库,显示 tables 并对其进行一些算术运算。
我有这个命令:
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
我应该如何格式化输出以显示每个 table 的数据库名称 ($a)?我试着回应它或||但这只会在显示所有 table 之后打印数据库名称。或者有没有办法将变量传递给 awk?
所需的输出如下所示:
database1.table1
database1.table2
看起来 show tables ...
命令的输出将包含 1 行 header,后跟 table 名称列表。
您可以通过管道输入 tail -n +2
来跳过第一行,
然后使用另一个 while
循环以所需格式回显数据库名称和 table 名称对:
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
你也可以
impala-shell -q ... | awk -v db="$a" 'NR > 1 {print db "." [=10=]}'