bash - 解析 iw wlan0 站转储输出
问题描述
我知道这是其他帖子中的类似问题。但我想解析 iw wlan 站转储并将最强站信号的 Mac 地址保存到文本文件中,或者在 python 中将其作为变量。
比较具有不同信号的多个电台(数字越小表示最强)。我需要比较来自这多个站点的信号并选择最强信号的 MAC 地址(例如 -55 与 -60)
# awk '/Station/{val=$2;next} /signal/{sub(/^ +/,"");print "MAC Address: "val ORS $0;val=""}'
MAC Address: a8:83:02:cf:3d:e2
signal: -60 [-60] dBm
MAC Address: f4:60:e2:e2:2f:2e
signal: -55 [-55] dBm
从这里我想得到最低的数字(最强)。只需要打印1个站(mac地址) 示例图像
--
最新代码结果(所选信号与 MAC 地址不匹配)
# iw dev wlan0 station dump | grep -E 'Station|signal' //Reference
Station a8:8e:08:cf:1d:e9 (on wlan0) <-------
signal: -28 [-28] dBm
Station f4:20:e2:a8:3f:3e (on wlan0)
signal: -55 [-55] dBm
# sudo iw dev wlan0 station dump | awk //Command
MAC Address: f4:20:e2:a8:3f:3e <-------
signal: -27 [-28] dBm
解决方案
EDIT5:由于您没有告诉可以在字符串之后station
或字符串MAC Address
所以我以前的代码现在只查找station
字符串,我添加了逻辑来检查两者。还考虑到这<-------
仅用于理解目的,而不存在于 Input_file 中。
awk '
/Station/{
if(value){
b[count]=value
}
a[++count]=$2
value=""
next
}
/MAC Address/{
if(value){
b[count]=value
}
a[++count]=$NF
value=""
next
}
/signal/{
sub(/^ +/,"")
value=sig_value<$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
if(value){
b[count]=value
}
for(i=1;i<=count;i++){
split(b[i],array,"[[:space:]]+")
max=max==""?array[2]:max
ip_max=max>array[2]?ip_max:a[i]
max=max>=array[2]?max:array[2]
va[max]=max>=array[2]?va[max]?va[max]:b[i]:b[i]
}
print "MAC Address: "ip_max ORS va[max]
}' Input_file
EDIT4:根据 OP 获得 LOWEST 信号值,可以尝试跟随。
awk '
/Station/{
if(value){
b[count]=value
}
a[++count]=$2
value=""
next
}
/signal/{
sub(/^ +/,"")
value=sig_value<$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
if(value){
b[count]=value
}
for(i=1;i<=count;i++){
split(b[i],array,"[[:space:]]+")
max=max==""?array[2]:max
ip_max=max>array[2]?ip_max:a[i]
max=max>=array[2]?max:array[2]
va[max]=max>=array[2]?va[max]?va[max]:b[i]:b[i]
}
print "MAC Address: "ip_max ORS va[max]
}' Input_file
EDIT3:(这个解决方案是为了获得最高的信号值)现在添加第四个答案,因为 OP 再次改变了要求并告诉所有站最好的信号值应该出现然后尝试跟随。
awk '
/Station/{
if(value){
b[count]=value
}
a[++count]=$2
value=""
next
}
/signal/{
sub(/^ +/,"")
value=sig_value>$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
if(value){
b[count]=value
}
for(i=1;i<=count;i++){
split(b[i],array,"[[:space:]]+")
ip_max=max<array[2]?ip_max:a[i]
max=max<array[2]?max?max:array[2]:array[2]
va[max]=b[i]
}
print "MAC Address: "ip_max ORS va[max]
}' Input_file
EDIT2: OP 说它signal
在 Input_file 中可能有多个字符串,那么下面的内容可能会对您有所帮助。
awk '
/Station/{
if(val && value){
print "MAC Address: "val ORS value
val=value=""
}
val=$2
next
}
/signal/{
sub(/^ +/,"")
value=sig_value>$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
print "MAC Address: "val ORS value
}' Input_file
编辑:由于 OP 更改了要求并要求获得最强信号的值,因此以下可能会有所帮助。(这里考虑到该mac address
值只会出现 1 次,但信号的值将是多个,我们需要从中选择最好的一个)。
awk '
/Station/{
val=$2
next
}
/signal/{
sub(/^ +/,"")
value=sig_value>$2?$0:prev?prev:$0
sig_value=$2
prev=$0
}
END{
print "MAC Address: "val ORS value
}' Input_file
请您尝试关注一次。
awk '/Station/{val=$2;next} /signal/{sub(/^ +/,"");print "MAC Address: "val ORS $0;val=""}' Input_file
推荐阅读
- macos - Apache 站点在 Safari 中加载,但在 Chrome 或 Firefox 中不加载
- javascript - 如何在 html td id 中使用 javascript 变量
- excel - “列表框末尾的空白项”
- react-admin - 我该如何配置
忽略 location.search 参数? - xml - EvaluateXPath 空字符串集
- php - 如何根据当前 URL 进行条件逻辑
- python - Python 3.5 类型注释变量没有初始值
- python - Python:尝试在更改变量时重新计算类属性
- ms-access - 访问前端对大多数用户来说都可以正常工作,但一个用户总是遇到各种问题
- c - 检查二维数组元素的相邻元素,而不超过一次