Awk

重新排列文件,使其易於閱讀

  • January 28, 2017

我有幾個地方需要每天檢查 WiFi。目前,當我執行我的腳本時,這是我得到的結果。

第一個名稱對應於第一個 MAC、第一個 IP 等等。grep我怎樣才能用,awk或重新排列這個文件sed

Name                : WiFi 1
Name                : WiFi 2
Name                : WiFi 3
Name                : WiFi 4
Name                : WiFi 5
Name                : WiFi 6
Name                : WiFi 7
MAC                 : aa:aa:aa:aa:aa:aa
MAC                 : bb:bb:bb:bb:bb:bb
MAC                 : cc:cc:cc:cc:cc:cc
MAC                 : dd:dd:dd:dd:dd:dd
MAC                 : ee:ee:ee:ee:ee:ee
MAC                 : ff:ff:ff:ff:ff:ff
MAC                 : gg:gg:gg:gg:gg:gg
IP                  : 10.0.1.0
IP                  : 10.0.1.1
IP                  : 10.0.1.2
IP                  : 10.0.1.3
IP                  : 10.0.1.4
IP                  : 10.0.1.5
IP                  : 10.0.1.6
Status              : Operational
Status              : Operational
Status              : Operational
Status              : Operational
Status              : Operational
Status              : Operational
Status              : Operational
Interface           : X2
Interface           : X2
Interface           : X2
Interface           : X2
Interface           : X2
Interface           : X2
Interface           : X2

我希望它們都輸出如下所示

Name                : WiFi 1
MAC                 : aa:aa:aa:aa:aa:aa
IP                  : 10.0.1.0
Status              : Operational
Interface           : X2

自計數版本,按季節調味:

awk '    $1!=last {n=0;last=$1}
        {++n;gaggle[n]=gaggle[n]"\n"$0}
        END { for (k in gaggle) print gaggle[k] }
'

對於七個 AP,使用 GNUsedbash/ ksh

for (( i = 1; i <= 7; ++i )); do
 sed -n "$i~7p" data
 echo
done

使用中提供的資訊data,這會產生

Name                : WiFi 1
MAC                 : aa:aa:aa:aa:aa:aa
IP                  : 10.0.1.0
Status              : Operational
Interface           : X2

Name                : WiFi 2
MAC                 : bb:bb:bb:bb:bb:bb
IP                  : 10.0.1.1
Status              : Operational
Interface           : X2

Name                : WiFi 3
MAC                 : cc:cc:cc:cc:cc:cc
IP                  : 10.0.1.2
Status              : Operational
Interface           : X2

(ETC。)

如果我們不知道有多少 AP,請計算以下Name行:

num="$( grep -c '^Name' data )"

for (( i = 1; i <= num; ++i )); do
 sed -n "$i~${num}p" data
 echo
done

GNU 特定的sed範圍語法first~step

匹配step以 line 開頭的每一行first

根據 GNUsed手冊。

引用自:https://unix.stackexchange.com/questions/340143