我在python脚本中使用两个简短的UNIX命令来获取有关附近无线接入点的一些数据。
"iwlist NIC scan | grep ESSID | awk '{print $1}'"
"iwlist NIC scan | grep level | awk '{print $3}'"
我的问题是我一个接一个地使用这两个命令,这意味着它不会生成“对称”数据。您可能会获得6个ESSID和4个信号强度数据。
因为第一次,脚本找到6个AP(A,B,C,D,E和F),下次只有4个AP(A,C,E和F)。
我的一些问题如下:
iwlist NIC scan
的结果,然后将两个不同的grep
和awk
序列应用于同一个输入?这样你至少得到一个对称的结果列表。
提前谢谢!
答案 0 :(得分:10)
如何将awk
用作grep
:
iwlist NIC scan | awk '/ESSID/ {print $1} /level/ {print $3}'
这样可以同时为您提供ESSID和等级线。你可能想要更复杂一点,至少用它代表的东西标记线条;选项很多。从您的代码中不清楚您将如何使用输出,所以我不打算尝试再次猜测如何最好地呈现它(但我希望网络ID和级别在同一条线上会是一个很好的输出 - 它是可行的。)
答案 1 :(得分:4)
通常,您可以使用tee
和流程替换来完成此类路由:
iwlist NIC scan | tee >( grep -i ESSID | awk '{print $1}' ) | grep -i level | awk '{print $3}'
但由于以下几个原因,这种情况较差:
grep
是多余的,因为awk
可以自行进行过滤awk
命令。但是将一个命令的输出传递给两个不同的管道而没有显式临时文件的技术在其他地方可能会有用;认为这个答案只是一个示范。
答案 2 :(得分:1)
#!/bin/bash
iwlist <NIC> scan > tmpfile
grep -i ESSID tmpfile | awk '{print $1}'
grep -i level tmpfile | awk '{print $3}'
rm tmpfile
像这样的脚本可能就是你所期待的。