设置AWK分隔符以解析“airport -s”输出

时间:2010-01-17 02:34:44

标签: bash macos awk

我对AWK的经验很少,但它现在似乎是我最好的工具。

我正在尝试使用OS X中的 airport -s 命令获取附近BSSID的列表。输出如下所示:

                        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 个答案:

答案 0 :(得分:4)

似乎regexp可能更适合。也许只是一个简单的egrep -o

airport -s | egrep -o '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'

答案 1 :(得分:0)

我很想知道你如何设置FS到tab,因为如果机场在列之间输出一个标签,这应该有用。

您还可以使用正则表达式作为字段分隔符(至少在gawk中)。这将处理字段之间有一个或多个选项卡的情况:

airport -s | awk -F'\t+' '{print $2}'

答案 2 :(得分:0)

很简单,你只需要遍历每个字段并检查模式

airport -s | awk 'NR>1{ for(i=1;i<=NF;i++){if($i~/^[0-9][0-9]:/){print $i}}}'