HPUX shell脚本:拆分字符串,将它们放在一个数组中然后循环它们

时间:2011-01-22 16:54:11

标签: 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 个答案:

答案 0 :(得分:1)

首先,我假设一行看起来像:

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

并没有“E.g.1”或“(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,还有其他方法可以完成整个过程。

修改:将cut更改为sed