Мне нужна командная строка, которая преобразует этот ввод:

    capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431)
    signal: -68.00 dBm
    last seen: 0 ms ago
    SSID: ENH202.FW
    Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0

В эту строку вывода:

SSID: ENH202.FW  -68.00 dBm

Это вызвано следующей командой, которая считывает доступные сети Wi-Fi:

sudo iw dev wlan0 scan | grep SSID

Который перечисляет все сети, печатая каждое вхождение единственной строки, содержащей "SAID". Я хотел бы, чтобы такое же сканирование показало мощность сигнала каждого SSID.

Есть ли способ использовать инструменты командной строки, чтобы получить этот список с включенными уровнями сигнала?

-1
user3235770 26 Сен 2018 в 03:09

2 ответа

Лучший ответ

Это устанавливает значение переменной st при достижении сигнальной линии, а затем печатает его после строки SSID.

sudo iw dev wlan0 scan | awk '/signal:/{st=$2$3} /SSID:/{print $0" "st}'
1
miken32 26 Сен 2018 в 01:00

Команда sed может это сделать:

sed -n -e '/signal:/h' -e '/SSID:/{G;s/signal://;s/\n//;p}' <inputfile>

Объяснение :

Флаг -n сообщает sed не печатать строки.

Первое выражение -e находит строку с 'signal:' в ней и помещает ее в удерживаемое пространство. Второй находит строку с "SSID:" в ней, G добавляет к этой строке пространство удержания, s/signal:// удаляет часть "signal:", а s/\n// удаляет возврат каретки. Наконец, p сообщает sed напечатать пространство шаблонов.

1
Jack 26 Сен 2018 в 00:28