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 

これは、echoRSSIまたはechoDISTANCEの両方が画面に値を出力するため、機能していません。おそらくもっと良い方法がありますが、csvファイルを出力できるように列が必要なため、awkを使用しています。

4

2 に答える 2

1

オプションを使用awkして変数を渡し、入力が与えられていないためにブロックを使用する必要がある場合、いくつかの問題があります。また、シングルはファイルを追加せずに上書きすることに注意してください追加するには、次のものが必要です。-vBEGIN>>>

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

awk2 つのシェル変数を出力する必要はありません。

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