我想在某个点记录RSSI,该点距离路由器。距离将是用户输入,输出文件名也是如此,因此用户将键入以下内容:
sh rssi.sh output.csv 20
其中output.csv是csv我要追加结果,20是距离
目前rssi.sh看起来像:
#!/bin/bash
RSSI_CSV=$1
DISTANCE=$2
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\')
awk '{print $DISTANCE, $RSSI}' > $RSSI_CSV
这会根据用户输入创建RSSI_CSV,但不会在其中打印所需的值,我不知道为什么。
我想它是
awk '{print $DISTANCE, $RSSI}' > $RSSI_CSV
不能用作回波RSSI或回波DISTANCE都将值输出到屏幕。我正在使用awk,因为我想要列,所以我可以输出一个csv文件,也许有更好的方法?
答案 0 :(得分:1)
您的awk
需要使用-v
选项传递变量,并使用BEGIN
块,因为没有给出任何输入,因此存在一些问题。另请注意,单个>
将不附加,但会覆盖该文件。如需追加,您需要>>
:
awk -vD=$DISTANCE -vR=$RSSI 'BEGIN{print D,R}' >> $RSSI_CSV
演示:
$ DISTANCE=20
$ RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}')
$ awk -vD=$DISTANCE -vR=$RSSI 'BEGIN{print D,R}'
20 -47
注意:我相信你想要逗号分隔值:
$ awk -vD=$DISTANCE -vR=$RSSI 'BEGIN{print D","R}'
20,-47
但是,awk
对于打印变量来说是过度的,只需使用旧的echo
:
$ echo "$DISTANCE,$RSSI"
20,-47
答案 1 :(得分:0)
您不需要awk
来打印两个shell变量。
printf "%s,%s\n" "$DISTANCE" "$RSSI" >> "$RSSI_CSV"