2016-06-21 20 views
1

私は情報ブロックから値を取得しようとしています。次のコマンドでsedで行番号を抽出

RSSI: -21 
RSSI: -12 
RSSI: -13 
RSSI: -13 
RSSI: -16 
RSSI: -13 

hcidump -a | egrep 'RSSI|bdaddr' | grep -A1 --no-group-separator 'bdaddr XX:XX:XX:XX:XX' | egrep 'RSSI' 

をしかし、私は表示されるように末尾にのみ値を取得したいと思い

私は次の出力を作成しています。 しかし、私は右のパターンに苦しんだ、私は例えば、動作する1つのオンラインの多くのヒントを見つけましたが、ありません:

さらに
sed 's/RSSI: //' 

私は私のコマンドのスムーズな方法があるかどうかを知りたいですすべての|値が出力される前にバッファがいっぱいになるように、出力が遅くなります。

PS:私はこのコマンドをsystem()関数でCで使いたいのですが、値をC変数に格納するオプションがありますか?

答えて

2

これは試してみてください

hcidump -a |.. whatever...:XX:XX'|grep -Po 'RSSI:\s+\K.*' 

または

hcidump -a |.. whatever...:XX:XX'|awk '/RSSI/{print $2}' 
+0

両方のバージョンが完璧に動作しています。 – DaPole

2

sedのための必要はありません、あなたはcutを使用することはできません。

cut -d' ' -f2 myfile 

この意志出力のみ第二列は、列の区切り文字として1つの空白を考慮します。

編集:最初にこれを行う、myfileをで各行の先頭に空白を削除する:

sed -i 's/^ *//' myfile 
+0

それは私と一緒に動作しませんが、その理由は、私はRSSIの前に空白を言及するのを忘れています。 – DaPole

+1

私の編集した回答をご覧ください。 – dr01

0

それとも、あなたが間にスペースの可変数を持っている場合は、あなたが使用することができます以下

rev myfile | cut -d' ' -f1 | rev

+0

2つの回転は意味をなさない。 'cut -fx'を使っているので、2番目のフィールドを取ることができます... – Kent

+0

しかし、入力に' RSSI: -21 'のようなものが含まれていると、間に複数の空白がありますか?最後の数字は返されません。 – daemon12

+0

の場合は、スペースを(たとえばtrなどで)絞ったり、カット以外のツール(awkなど)を使用してください。私はrevとrevを選択しません。それはおそらく最も遅い方法でした。私の場合は、常に同じ量のスペースが必要です。 – Kent

関連する問題