将bash输出转换为JSON /字典

曲轴

我正在尝试在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章