
terraform.tfstateファイルから文字列を抽出したいと思います。
次のackコマンドを実行しています。 ...
awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate
このコマンドを実行すると、次の結果が表示されます。
"private_ip": "10.42.229.45",
2番目の二重引用符セット間の文字列を抽出して10.42.229.45
出力ファイルにコピーしたいと思います。
誰もがこれを行う方法に関するガイダンス/アドバイスを提供できますか?
答え1
おそらく必要なものは次のとおりです。
awk -F'"' '/nifi1a/{f=1} f && /private_ip/{print $4; exit}' terraform.tfstate
ただし、入力例がなければこれは推測にすぎず、コードの元の部分が最適ではない可能性があり、必要なものを達成するためのより良い(より簡潔で、移植可能で強力ななど)方法があるかもしれません。
あなたの質問を読んでいる人が「terraform.tfstateファイル」または他の入力形式が何であるかを知っていると仮定しないでください。常に簡潔でテスト可能なサンプル入力と期待される出力を表示することができます。
答え2
print
文字列を使用してsplit
必要な部分だけを印刷できます。
awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4];exit}' terraform.tfstate
結果を処理するために2番目のコマンドを生成するには、次のコマンドを使用できます。
awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate | awk -F\" '{print $4}'
アイデアは、二重引用符を"
区切り文字として使用し、$0
配列内で分割することです。次に、配列の1つの要素のみを印刷します。
ホスト名を追加する場合、コマンドは次のようになります。
awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4], "nifi1a";exit}' terraform.tfstate >>/etc/hosts