2017-08-11 1 views
1

私たちが持っているすべてのデータベースをとり、テーブルを見せてそこにいくつかの算術演算を実行する監視スクリプトを設定しようとしています。
私は、このコマンドを持っています。次の出力を生成while-readコマンドの各行で変数を出力

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 

答えて

2

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 
+0

素晴らしい作品、帽子を切って、ありがとう! –

1

また、行うことができ

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

すごく短くありがとう!私はawkを愛しています:) –

+0

または以下のようにsedを使うことができます: – Abis

+0

Impala-shell -q ... | sed/s/^/$ a/ – Abis

関連する問題