我有一个包含sql结果的shell变量。
echo "$sql"
SYSTEM 1000 40.625 /u01/oracle/datafile1.dbf
SYSAUX 1000 67.2375 /u02/oracle/datafile2.dbf
USERS 55 96.3636364 /u03/oracle/datafile3.dbf
UNDOTBS1 1000 98.0625 /u04/oracle/datafile4.dbf
我想为每一行应用相同的处理逻辑。 为此,我需要输出:
1st Iteration
a=SYSTEM b=1000 c=40.625 d=/u01/oracle/datafile1.dbf
2nd Iteration
a= SYSTEM b=1000 c=67.2375 d=/u01/oracle/datafile2.dbf
3rd Iteration
a= SYSTEM b=55 c=96.3636364 d=/u01/oracle/datafile3.dbf
4th Iteration
a= SYSTEM b=1000 c=98.0625 d=/u01/oracle/datafile4.dbf
注意:
答案 0 :(得分:1)
这可以在shell中使用read
和set
内置函数完成:
#!/bin/sh
sql="SYSTEM 1000 40.625 /u01/oracle/datafile1.dbf
SYSAUX 1000 67.2375 /u02/oracle/datafile2.dbf
USERS 55 96.3636364 /u03/oracle/datafile3.dbf
UNDOTBS1 1000 98.0625 /u04/oracle/datafile4.dbf"
echo "$sql" |
while read line; do
set -- $line
a=$1 b=$2 c=$3 d=$4
# Do something with a,b,c,d (or just use $1, $2, $3, $4.)
echo "$1 $2 $3 $4"
done
请注意,只要单词不包含像' *'这样的shell glob字符,就可以正常工作。 (尝试使用四个* * * *
)。如果您需要健壮,则应在$line
之前验证set
的内容。您可能还希望使用set -f
禁用文件名扩展。