运行时,iw help
您会看到警告:
难道不是屏幕抓取这个工具,我们不考虑它的输出稳定。
以下分为两部分:第一,避免问题的解决方案iw
,第二,对问题的解答。两者都适用于传统awk
以及(默认)GNU Awk
。
解决您的问题
我用iwconfig
代替iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
输出量
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
笔记
我很困惑,是要用,
还是用制表符(应该是\t
)分隔值,我,
在这里选择不带空格。如果这不是您想要的,请相应地进行更改s","f
,然后s
是Signal
和那里f
的Frequency
值。
我还移动了重定向,因此不必每次运行都打开文件,而只需打开一次。
awk
零件说明
-F'[ :=]+'
–设置一个不同的字段定界符,此处设置为+
方括号内的三个字符中的一个或多个()
/Freq/{gsub("\\.","");f=$5}
–在带有“ Freq”的行中,将所有点都替换为空(因为iwconfig
输出中的频率使用点作为千位分隔符),并将第五列的内容保存在变量中f
/Signal/{s=$7}
–在带有“信号”的行中,将第七列的内容保存在变量中 s
END{print s","f}
-处理所述输入,之后print
的变量s
和f
在它们之间具有字面逗号
回答你的问题
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
输出量
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
awk
零件说明
/freq/{f=$2}
–在带有的行中freq
,将第二列(以空格分隔)保存在变量中f
/signal/{s=$2}
–在带有的行中signal
,将第二列保存在变量中s
END{print s","f}
-处理所述输入,之后print
的变量s
和f
在它们之间具有字面逗号