限制“nmcli dev wifi”为每个唯一 SSID 显示一个条目

限制“nmcli dev wifi”为每个唯一 SSID 显示一个条目

当我使用 NetworkManager 的图形界面(通过托盘图标)时,它会显示大约 10 个 SSID(针对我当前的位置)。然而,当我使用nmcli dev wifi它时,它返回大约 55 个条目。原因是同一 SSID 以不同的信号强度(有时甚至不同的传输速率)多次返回。大多数重复的 SSID 具有不同的频道/频段,但有些具有相同的频道/频段。

样本输出

IN-USE  SSID               MODE   CHAN  RATE        SIGNAL  BARS  SECURITY    
        G4_9647            Infra  11    65 Mbit/s   84      ▂▄▆█  WPA2        
        Telekom            Infra  11    130 Mbit/s  64      ▂▄▆_  --          
        Airport-Frankfurt  Infra  11    130 Mbit/s  62      ▂▄▆_  --          
        FRAWiSe            Infra  11    130 Mbit/s  60      ▂▄▆_  WPA2 802.1X 
        FRAWiSe            Infra  48    405 Mbit/s  60      ▂▄▆_  WPA2 802.1X 
        Airport-Frankfurt  Infra  48    405 Mbit/s  60      ▂▄▆_  --          
        Ca81pVb5jKTw       Infra  11    130 Mbit/s  59      ▂▄▆_  WPA2        
        Telekom            Infra  48    405 Mbit/s  59      ▂▄▆_  --          
        Airport-Frankfurt  Infra  36    270 Mbit/s  57      ▂▄▆_  --          
        Telekom            Infra  36    270 Mbit/s  55      ▂▄__  --          
        FRAWiSe            Infra  36    270 Mbit/s  55      ▂▄__  WPA2 802.1X 
        Ca81pVb5jKTw       Infra  11    130 Mbit/s  54      ▂▄__  WPA2        
        AndroidAP 3        Infra  6     65 Mbit/s   50      ▂▄__  WPA2        
        FRAWiSe            Infra  11    130 Mbit/s  50      ▂▄__  WPA2 802.1X 

以下命令还列出了大约 55 个连接

sudo iwlist wlp4s0 scan | grep ESSID
sudo iw dev wlp4s0 scan | grep SSID

如何使用nmcliNetworkManager GUI 获得相同的结果并将结果限制为每个唯一 SSID 的一个条目?我想在不知道 SSID 位于哪个通道/频段的情况下实现这一点(在这种情况下我可以只使用 grep)。例如,仅返回具有最高信号强度的频道/频段的条目。

答案1

nmcli dev wifi | awk -F'  +' '{ if (!seen[$2]++) print}'

awk 脚本的工作原理如下:

  • -F' +' - 分隔符是两个或多个空格
  • 如果之前没有看到第二列 (SSID),则打印。然后将该值加 1,以便下次不再打印

相关内容