2011-01-22 15 views
1

以下の例のようにコマンド出力があります。HPUXシェルスクリプト:文字列を分割し、配列に入れてループします。

E.g.1 {quey_result} -------- .2 .5 .74 (3 rows) 
E.g.2 {quey_result} -------- .1 (1 row) 
E.g.3 {quey_result} -------- .234 .54 (2 rows) 
E.g.4 {quey_result} -------- (0 row) 

私が(0.2、0.5、0.74のような)ものを十進数のそれぞれをキャプチャして、いくつかの他のコマンドのためにそれらを使用したいです。

最初と最後を整える方法を教えてください。各小数点値を変数に格納して処理し、ループします。

Brで、

答えて

1

まず--Shafeer が、私は行が見えることを想定しています:

{query_result} -------- .2 .5 .74 (3 rows) 

そして "Eg1と" か "(3行)" を持っていません。

#!/bin/sh 
command | while read -r line 
do 
    line=$(echo "$line" | sed 's/.*--- \([^(]*\) (.*/\1/' 
    set -- $line 
    for arg 
    do 
     do_something_with "$arg" 
    done 
done 

これは、表示されているもの以外のスペースがないことに依存します。 cutコマンドを変更するか、必要に応じてawkを使用して回線を分割することができます。お使いのシェルが$()をサポートしていない場合のいずれかの方法は、あなたがバッククォートを使用する必要がありますことを

set -- $(echo "$line" | sed 's/.*--- \([^(]*\) (.*/\1/') 

注:

whileループ内

最初の2行はに組み合わせることができます

`echo "$line" | sed 's/.*--- \([^(]*\) (.*/\1/'` 

kshまたはBashをお持ちの場合は、他の方法で処理を行うことができます。

編集:は長い努力と良い答えについてsed

+0

1にcutを変更しました。 – Anders

+0

Andersさん、ありがとうございました。あなたの前提に少し修正が必要です。行は{query_result} -------- .2 .5 .74(3 rows)のようになります。 "(3行)"は行の一部です。最後の部分をトリミングする方法を教えてください。 – Shafeer

+0

@Shafeer:私の編集した答えを見てください。 (私はデニス、アンダーはそうではありません) –

関連する問題