ksh将字符串拆分为数组以写入文件

时间:2015-12-15 08:27:47

标签: unix ksh

这是我用来从数据库中选择字符串的代码。拆分然后写入文本文件。

#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

1 个答案:

答案 0 :(得分:2)

在数组赋值周围还需要一对parens

arr=($(echo $RETVAL | tr "-" "\n"))

$()是一个评估。 arr=()是复合作业。拆分是在空格上,所以你甚至可以使用空格而不是换行符来像这样

tr "-" " "

如果您的ksh不支持复合赋值,则可以使用set -A

set -A arr -- $(echo $RETVAL | tr "-" " ")