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 文件中执行之间的区别

答案1

这看起来更像是一个外壳问题,你尝试过吗..?

vth=$(echo "$inn" | awk -F ' '"$number"': |@' '{print $2}')
  • 确保你的 shell 是 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并不意味着可解析。

有一个-j选项ip可以生成一个 json 脚本,该脚本可能更容易使用jq实用程序进行解析。

答案2

使用BEGIN块:

awk -v n="$number" 'BEGIN {FS=" " n ": |@"}'

所以你的就变成了:

vth=$(echo "$inn" | awk -v n="$number" 'BEGIN {FS=" " n ": |@"} {print $2}')

相关内容