あなたの質問にお答えします:私はawkを使用します。しかし、おそらく私はPythonと単一の正規表現を使用して、辞書のすべてのパラメータを取得します。出力の
SLEEP=10 # time to sleep between samples
while true; do # or launch it as a cron task
TIMESTAMP=$(date +'%s')
IW=$(iwconfig wlan0)
# capture each parameter in a variable
IEEE=$(echo "$IW" | grep -oP '(?<=IEEE).[^\s]*')
ESSID=$(echo "$IW" | grep -oP '(?<=ESSID:).[^\s]*')
BITRATE=$(echo "$IW" | grep -oP '(?<=Bit Rate=)\d+\s.[^\s]+(?=[\s]+Tx)')
TXPOWER=$(echo "$IW" | grep -oP '(?<=Tx-Power=)\d+\s.*')
RLL=$(echo "$IW" | grep -oP '(?<=limit:)\d')
RTSTHR=$(echo "$IW" | grep -oP '(?<=RTS thr:).+(?=[ ]+Fra)')
FRAGTHR=$(echo "$IW" | grep -oP '(?<=Fragment thr:).+')
TXPOWER=$(echo "$IW" | grep -oP '(?<=Tx-Power=)\d+ .*')
PM=$(echo "$IW" | grep -oP '(?<=Management:).*')
LQ=$(echo "$IW" | grep -oP '(?<=Quality=)\d+/\d+')
SIGLEV=$(echo "$IW" | grep -oP '(?<=level=).*')
RXNWID=$(echo "$IW" | grep -oP '(?<=nwid:)\d+')
RXCRYPT=$(echo "$IW" | grep -oP '(?<=crypt:)\d+')
RXFRAG=$(echo "$IW" | grep -oP '(?<=frag:)\d+')
RTERET=$(echo "$IW" | grep -oP '(?<=retries:)\d+')
RTIMISC=$(echo "$IW" | grep -oP '(?<=misc:)\d+')
RTMBEAC=$(echo "$IW" | grep -oP '(?<=beacon:)\d+')
#line
echo $TIMESTAMP,$BITRATE,$LQ,$SIGLEV,$RTMBEAC,...
sleep $SLEEP
done
例:
ボーナス:あなたがGNUのgrepのを(あなたはiwconfigの出力として変化し得る必要があります正規表現は、デバイスに依存している)を使用して、bashで欲しいものを私がやっての練習を行ってきました:
1331848207,54 Mb/s,70/70,-37 dBm ,0,...
1331848217,54 Mb/s,70/70,-35 dBm ,0,...
1331848227,54 Mb/s,70/70,-34 dBm ,0,...
1331848237,54 Mb/s,70/70,-39 dBm ,0,...
1331848247,54 Mb/s,70/70,-35 dBm ,0,...
1331848257,54 Mb/s,70/70,-37 dBm ,0,...
sedは仕事をするように聞こえます(文字列内のスペースには複雑なエスケープルールがないものとします)。 –
sedが良いです。 -d = DELIMには1つの区切り文字が必要なため、2つの空白が余分なフィールドのように見えるので、cutはうまくいかないかもしれません。あなたは入力を投稿できますか? – octopusgrabbus
入力例を示してください。しかし、awkのデフォルトのフィールド区切り文字は "空白"なので、それはちょうど2スペースの問題ではありません。 –