我正在尝试在bash中创建与JSON兼容的输出,可以由nodejs和python读取:
{"link":XX,"signal":YY,"noise":ZZ}
这是未经过滤的结果:
iwconfig wlan0
wlan0 IEEE 802.11bg ESSID:"wifi@someplace" Nickname:"<WIFI@REALTEK>"
Mode:Managed Frequency:2.452 GHz Access Point: C8:4C:75:20:B4:8E
Bit Rate:54 Mb/s Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Encryption key:A022-1191-3A Security mode:open
Power Management:off
Link Quality=100/100 Signal level=67/100 Noise level=0/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
但是在应用我的过滤器之后:
iwconfig wlan0 | grep Link | tr -d '/100' | tr '=' ' ' | xargs | awk '{printf "{\"link\":"$3",\"signal\":"$6",\"noise\":"$9"}"}'
我得到的结果不稳定且不完整:
{"link":98,"signal":6,"noise":}
{"link":Signal,"signal":Noise,"noise":}
永远不会捕获“ noise”值,有时printf返回错误的块。
有没有更“可靠”的方式来做到这一点?
您问题中代码的问题在这里:
tr -d '/100'
该命令执行的操作只是删除所有字符:'/', '1', '0'
。
从的手册中tr
,
-d, --delete delete characters in SET1, do not translate
那不是您想要的东西。你需要的是更换整个字符串/100
用""
。
使用:sed 's/\/100//g'
代替。
... | grep Link | sed 's/\/100//g' | tr '=' ' ' | awk '{printf "{\"link\":"$3",\"signal\":"$6",\"noise\":"$9"}"}'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句