Linux ksh(93u+) : 逐行读取属性文件并用 delim 拆分每一行
Linux ksh(93u+) : Read properties file line by line and split each line with delim
我有一个属性文件,想逐行读取并将每一行拆分为一个数组。
我引用了 Split string into an array in Bash 并且 awk 语句看起来很复杂。同时我想遵循 link 中提供的建议。
当我在 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 $'[=13=]' each; do # use a NUL terminated field separator
array+=("$each")
done < <(printf "%s" "$str" | awk '{ gsub(/,[ ]+|$/,"[=13=]"); 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}
任何帮助。谢谢。
考虑以下因素
#!/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 不同,在 ksh 中读取数组是使用 -A
而不是 -a
。
我有一个属性文件,想逐行读取并将每一行拆分为一个数组。 我引用了 Split string into an array in Bash 并且 awk 语句看起来很复杂。同时我想遵循 link 中提供的建议。 当我在 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 $'[=13=]' each; do # use a NUL terminated field separator
array+=("$each")
done < <(printf "%s" "$str" | awk '{ gsub(/,[ ]+|$/,"[=13=]"); 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}
任何帮助。谢谢。
考虑以下因素
#!/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 不同,在 ksh 中读取数组是使用 -A
而不是 -a
。