awk は文の変数を評価します。

awk は文の変数を評価します。

私はこれに慣れておらず、awkオンラインで見つけた多くの提案を試しましたが、問題を解決することはできません。$number-F arg値内で評価する変数が必要です。

このドアは期待どおりに機能します。

inn=$(ip ad)     
vth=$(echo $inn | awk -F ' 6: |@' '{print $2}')
echo $vth

しかし、この「6」を抽出し、それに応じて値を変更する必要がありますが、どうすればよいですか?

これは最高の推測ですが、うまくいきません。

     inn=$(ip ad) 
     vth=$(echo $inn | awk -vn="$number" -F ' n: |@' '{print $2}')
     echo $vth

アップデート:@Archemarが提供したソリューションを試してみました。

コンソールではうまくいきますが、ファイルに追加すると機能しませんか?なぜ?変数の評価がどのように異なるかファイルを作成して自分で実行してみてください。快適

編集:1)$innを追加する2)コンソールと.shファイルで実行することの違い

ベストアンサー1

これはシェルの問題に近いです。試してみましたか?

vth=$(echo "$inn" | awk -F ' '"$number"': |@' '{print $2}')
  • シェルがbashであることを確認してください(例:最初の行は#!/bin/bash)。
  • 他の場所で必要でない場合は、$inn次を使用します。vth=$( ip ad | ... )
  • @(または)の結果を再現できません。ip a sip ad

$number使用するLANインターフェース名番号をキャプチャしてください。

vth=$(ip a s | awk -F'[: @]' -v n="$number" '$1 == n { print $3 ; exit; }' )

の結果はip a s解析できないことに注意してください。

ユーティリティを使用してより簡単に解析できるjsonスクリプトを生成する-jオプションがあります。ipjq

おすすめ記事