如何在awk正则匹配中使用变量,输出指定BSSID的4行内容
问题:用Awk匹配指定BSSID并输出后续4行内容
我花费了约2小时进行研究,但始终无法实现需求:使用Awk显示包含指定变量的4行内容。
stored.txt的内容如下:
DATE: 12.12.1222 BSSID: 22:33:44:55:66:88 SSID: TestAP1 PIN: 29483029 PSK: SAHJSHGD DATE: 12.12.1222 BSSID: 11:22:33:44:55:66 SSID: TestAP12 PIN: 12345678 PSK: ABCDEFG
我尝试执行了以下命令:
cat stored.txt | awk -v var="11:22:33:44:55:66" '/BSSID: /{print var} {p = 4} p > 0 {print $0; p--}'
但不知道如何将Awk变量嵌入到匹配模式中,期望得到的输出为:
BSSID: 11:22:33:44:55:66 SSID: TestAP12 PIN: 12345678 PSK: ABCDEFG
解决方案
Awk中如果要在匹配逻辑里使用变量,不能直接用//的正则语法,需要用~匹配运算符,把变量和字符串拼接起来作为匹配条件。正确的命令如下:
awk -v var="11:22:33:44:55:66" '$0 ~ "BSSID: " var {p=4} p>0 {print; p--}' stored.txt
命令解释:
-v var="11:22:33:44:55:66":定义Awk变量var,存储要匹配的BSSID值$0 ~ "BSSID: " var:当当前行($0)包含"BSSID: "加上变量var的内容时,设置计数器p=4(表示接下来要输出4行)p>0 {print; p--}:只要计数器p大于0,就打印当前行,然后将p减1,直到p变为0后停止输出
执行这个命令后,就能得到你期望的输出结果,同时不需要用cat做多余的管道操作,直接让Awk读取文件即可。
内容的提问来源于stack exchange,提问作者Karol Trawa
相关产品推荐
相关产品推荐

