【问题标题】:Set AWK delimiter to parse "airport -s" output设置 AWK 分隔符以解析“airport -s”输出
【发布时间】:2010-01-17 02:34:43
【问题描述】:

我对 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

我知道这是一个单行解决方案,所以我什至不得不问我真的很尴尬......请善待。 :)

【问题讨论】:

    标签: bash macos awk


    【解决方案1】:

    似乎正则表达式可能更适合。也许只是一个简单的egrep -o

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

    【讨论】:

    • 比我玩弄的 sed 脚本更好。
    【解决方案2】:

    我很想知道您如何将 FS 设置为选项卡,因为如果机场在列之间输出选项卡,那应该可以工作。

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多