2011-01-22 134 views
1

我有一個命令輸出,如下面所示的一些示例。HPUX shell腳本:拆分字符串,將它們放在一個數組中,然後循環它們

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) 

我想要捕獲每個十進制數(如.2,.5,.74)並將它們用於其他一些命令。

請幫助我如何修剪開始和結束;然後將每個十進制值存儲在變量和進程中,然後循環。

BR, --Shafeer

回答

1

首先,我假設行的樣子:

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

而且沒有 「例一」 或 「(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來分割線路。

while循環中的前兩行可以合併爲:

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

注意,無論哪種方式,如果你的shell不支持$(),那麼你就需要使用反引號:

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

如果你有ksh或Bash,還有其他方法可以完成整個過程。

編輯:改變cutsed

+0

+1對於長期的努力和很好的答案。 – Anders 2011-01-22 18:13:53

相關問題