使用 while-read 命令的每一行打印变量
Posted
技术标签:
【中文标题】使用 while-read 命令的每一行打印变量【英文标题】:Print variable with each line of while-read command 【发布时间】: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
【问题讨论】:
【参考方案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./"
以上是关于使用 while-read 命令的每一行打印变量的主要内容,如果未能解决你的问题,请参考以下文章