You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用awk如何读取指定第N列及之后的全部字段内容?

解决方案

你可以修改awk的逻辑,将第4列开始的所有字段拼接为完整的连接名,修改后的命令如下:

wf_info="$(nmcli -c no device | grep "wifi[^-]" | awk '{conn=""; for(i=4;i<=NF;i++) conn=conn" "$i; gsub(/^ /,"",conn); print "wf_devc="$1, "wf_state="$3, "wf_conn=\""conn"\""}')"
eval "$wf_info"

改动说明

  • awk内部新增循环从第4个字段遍历到最后一个字段NF(NF是awk内置变量,表示当前行总字段数),把所有内容拼接成完整的连接名
  • 用gsub去掉拼接后开头多余的空格
  • 给wf_conn的值加上双引号,避免eval的时候空格被当做分隔符处理

你也可以用更稳妥的方案,避免使用eval,直接分别赋值:

# 先过滤出wifi设备行
wifi_line=$(nmcli -c no device | grep "wifi[^-]")
wf_devc=$(echo "$wifi_line" | awk '{print $1}')
wf_state=$(echo "$wifi_line" | awk '{print $3}')
wf_conn=$(echo "$wifi_line" | awk '{for(i=4;i<=NF;i++) printf "%s ",$i; print ""}' | sed 's/ *$//')

这种方案不需要eval,也不会有空格解析的问题。

验证

执行后输出变量可以得到完整的连接名:

echo "$wf_devc"   # 输出 wlp3s0
echo "$wf_state"  # 输出 connected
echo "$wf_conn"   # 输出 My Test Connection

内容的提问来源于stack exchange,提问作者nino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:02