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 提供的解決方案。
它在控制台中執行良好,但是當我將它添加到文件中時,它不起作用?為什麼?.sh文件和直接在控制台中執行的變數評估有何不同?
編輯:1)添加 $inn 2)在控制台和 .sh 文件中執行的區別
這看起來是一個shell問題,你試過嗎..?
vth=$(echo "$inn" | awk -F ' '"$number"': |@' '{print $2}')
- 確保將您的 shell 用作 bash(例如,第一行是
#!/bin/bash
)- 如果您不需要
$inn
其他地方,請使用vth=$( ip ad | ... )
- 我無法重現(或)
@
的結果ip a s``ip ad
擷取
$number
我會使用的 lan 介面名稱編號vth=$(ip a s | awk -F'[: @]' -v n="$number" '$1 == n { print $3 ; exit; }' )
請注意,結果
ip a s
並不意味著可解析。有一個
-j
選項ip
可以生成一個可能更容易使用jq
實用程序解析的 json 腳本。