Awk

awk 在語句中評估變數

  • June 7, 2021

我是新手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 腳本。

引用自:https://unix.stackexchange.com/questions/653174