我有一个命令输出,如下图所示。
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
答案 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