Установите разделитель AWK для анализа вывода "airport -s" - PullRequest
0 голосов
/ 17 января 2010

У меня очень мало опыта работы с AWK, но сейчас он кажется лучшим инструментом для моих целей.

Я пытаюсь получить список ближайших BSSID с помощью команды airport -s в OS X. Вывод выглядит следующим образом:

                        SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
 MyWireless 00:11:22:33:44:55 -85  64      N  US WPA(PSK/TKIP/TKIP) WPA2(PSK/TKIP/TKIP) 
 Your Wireless 66:77:88:99:00:11 -84  64      N  US WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) 

Так ясно, что я ищу вторую колонку. Итак, я попробовал:

airport -s | awk '{print $2}'

И это прекрасно работает, пока у меня не будет SSID с пробелом в его имени. Я пытался установить IFS на вкладку, FS на вкладку, похоже, ничего не работает.

Я продолжаю получать это:

00: 11: 22: 33: 44: 55

Ваш

Я надеюсь в конце концов получить простой список:

00: 11: 22: 33: 44: 55

66: 77: 88: 99: 00: 11

Я знаю, что это однострочное решение, поэтому мне очень стыдно, что мне даже нужно спросить ... Пожалуйста, будьте добры. :)

Ответы [ 3 ]

4 голосов
/ 17 января 2010

Похоже, регулярное выражение может быть лучше подходит. Может быть, просто egrep -o

airport -s | egrep -o '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'
0 голосов
/ 17 января 2010

просто, вам просто нужно пройти через каждое поле и проверить наличие шаблона

airport -s | awk 'NR>1{ for(i=1;i<=NF;i++){if($i~/^[0-9][0-9]:/){print $i}}}' 
0 голосов
/ 17 января 2010

Мне было бы интересно посмотреть, как вы устанавливаете FS на вкладку, потому что это должно работать, если аэропорт выводит вкладку между столбцами.

Вы также можете использовать регулярное выражение в качестве разделителя полей (по крайней мере, в gawk). Это будет обрабатывать случай, когда между полями есть одна или несколько вкладок:

airport -s | awk -F'\t+' '{print $2}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...