Linux ksh(93u +):逐行读取属性文件,并用delim拆分每一行

时间:2018-04-16 15:33:20

标签: ksh

我有一个属性文件,想要逐行读取并将每一行拆分成一个数组。 我引用了Split string into an array in Bash并且awk语句看起来很复杂。同时我想按照链接中提供的建议。 当我在bash shell中尝试命令时:

export $line1="table1;/users/user_name/dir1/dir2;/users/user_name/dirA/dirB" 
readarray -td; a <<<"$line1,"; unset 'a[-1]'; declare -p a;

抛出错误。

bash: readarray: -d: invalid option
readarray: usage: readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

不能在以下awk声明下:

array=()
while read -r -d $'\0' each; do   # use a NUL terminated field separator 
    array+=("$each")
done < <(printf "%s" "$str" | awk '{ gsub(/,[ ]+|$/,"\0"); print }')
declare -p array

转换为我的要求。

这是我阅读文件的方式:

while read record_line; do
    if [ ! -z "$record_line" -a "$record_line" != " " ]; then
    readarray -td; a <<<"$record_line,"; unset 'a[-1]'; declare -p a;
    fi
done<${PPROPERTIES_FILE} 

任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

考虑以下

#!/usr/bin/env ksh
line=0
while IFS=';' read -rA pieces; do
  line=$(( line + 1 ))
  unset "pieces[0]"    # ignore first
  echo "Found pieces on line $line:"
  printf ' - %s\n' "${all_pieces[@]}"
done <in.txt

请注意,与bash不同,使用-A而不是-a来读取ksh中的数组。