С помощью iw
У меня нет nm-tool установлен, поэтому я использую iw.
Эта команда сортирует точки доступа по уровню сигнала, сначала самый сильный:
sudo iw dev wlan0 scan | egrep "signal:|SSID:" | sed -e "s/\tsignal: //" -e "s/\tSSID: //" | awk '{ORS = (NR % 2 == 0)? "\n" : " "; print}' | sort
Каждая команда объясняла:
iw dev wlan0 scan: Поиск точек доступа, доступных через интерфейс wlan0
egrep "signal:|SSID:": Получить линии с уровнем сигнала и идентификаторами SSID из iwэто выход. Теперь результат выглядит следующим образом:
signal: -77.00 dBm SSID: nameOfAccessPoint1 signal: -71.00 dBm SSID: nameOfAccessPoint2
sed -e "s/\tsignal: //" -e "s/\tSSID: //": Уменьшить egrepвывод на этот:
-77,00 дБм nameOfAccessPoint1-71,00 дБм nameofaccesspoint2
awk '{ORS = (NR % 2 == 0)? "\n" : " "; print}': Выведите уровень сигнала и SSID на одну линию. Более конкретно, когда номер строки (NR) является четным, т.е. мы находимся на строке, показывающей точку доступа, разделитель выходных записей (ORS) должен быть разрыв строки. В противном случае мы находимся на линии, содержащей уровень сигнала, поэтому мы присоединяемся к линии, делая ORS простое пространство.
Если мы sort на этом выходе мы получаем список уровней сигнала и точек доступа, показывающий точку доступа с самым сильным сигналом сверху:
-71.00 dBm nameOfAccessPoint2-77.00 dBm nameOfAccessPoint1
Внимание: Некоторые точки доступа могут иметь расширенные возможности: Расширенные возможности: * Список SSID
Итак, grepping "SSID:" вместо "SSID" помогает избежать этого дополнительного вывода, который в противном случае привел бы к сбою команды.