Awk
重新排列文件,使其易於閱讀
我有幾個地方需要每天檢查 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,使用 GNU
sed
和bash
/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
。根據 GNU
sed
手冊。