0

我想记录某个点的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 

不能作为 echo RSSI 或 echo DISTANCE 都将值输出到屏幕。我正在使用 awk 因为我想要列所以我可以输出一个 csv 文件,也许有更好的方法?

4

2 回答 2

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
于 2013-02-13T15:32:09.727 回答
0

您不需要awk打印两个 shell 变量。

printf "%s,%s\n" "$DISTANCE" "$RSSI" >> "$RSSI_CSV"
于 2013-02-13T15:45:49.120 回答