ksh 将字符串拆分为数组以写入文件
ksh split string to array to write to file
这是我用来 select 来自数据库的字符串的代码。拆分然后写入文本文件。
#Get information from DB for the given entrynum
RETVAL=`sqlplus -s username/pwd@db <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT (entrynum|| '-'||path||'-'|| syear||'-'|| eyear||'-'|| type) as RET
FROM entrydetails WHERE entrynum = 123;
EXIT;
EOF`
print "$scriptname return value :$RETVAL " 1>&2
#Output :123-/userx/data/tt-2015-2015-1
#split each value into an array
arr=$(echo $RETVAL | tr "-" "\n")
#write to text variable
writeText="export entrynum=${arr[0]}\n
export path=${arr[1]}\n
export Syear=${arr[2]}\n
export eyear=${arr[3]}\n
export type=${arr[4]}";
#write text to file
echo $writeText > ../in/log_file
我在文件中得到的输出是
export entrynum=123 /userx/data/1 2015 2015 1
export path=
export syesr=
export eyear=
export type=
预期结果是
export entrynum=123
export path=/userx/data/1
export syesr=2015
export eyear=2015
export type=1
数组赋值还需要一对括号
arr=($(echo $RETVAL | tr "-" "\n"))
$()
是一个评估。 arr=()
是复合赋值。拆分是白色的space,所以你甚至可以使用 space 而不是换行符来 tr 像这样
tr "-" " "
如果您的 ksh 不支持复合赋值,您可以使用 set -A
set -A arr -- $(echo $RETVAL | tr "-" " ")
这是我用来 select 来自数据库的字符串的代码。拆分然后写入文本文件。
#Get information from DB for the given entrynum
RETVAL=`sqlplus -s username/pwd@db <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT (entrynum|| '-'||path||'-'|| syear||'-'|| eyear||'-'|| type) as RET
FROM entrydetails WHERE entrynum = 123;
EXIT;
EOF`
print "$scriptname return value :$RETVAL " 1>&2
#Output :123-/userx/data/tt-2015-2015-1
#split each value into an array
arr=$(echo $RETVAL | tr "-" "\n")
#write to text variable
writeText="export entrynum=${arr[0]}\n
export path=${arr[1]}\n
export Syear=${arr[2]}\n
export eyear=${arr[3]}\n
export type=${arr[4]}";
#write text to file
echo $writeText > ../in/log_file
我在文件中得到的输出是
export entrynum=123 /userx/data/1 2015 2015 1
export path=
export syesr=
export eyear=
export type=
预期结果是
export entrynum=123
export path=/userx/data/1
export syesr=2015
export eyear=2015
export type=1
数组赋值还需要一对括号
arr=($(echo $RETVAL | tr "-" "\n"))
$()
是一个评估。 arr=()
是复合赋值。拆分是白色的space,所以你甚至可以使用 space 而不是换行符来 tr 像这样
tr "-" " "
如果您的 ksh 不支持复合赋值,您可以使用 set -A
set -A arr -- $(echo $RETVAL | tr "-" " ")