读取ksh中的文件内容并用','分割

读取ksh中的文件内容并用','分割

我的 file.txt 包含以下内容:-

./raw_input/0009/img.raw,./raw_input/0009/calib.raw

答案1

如果你的kshksh93mksh,您可以使用以下命令将第一行读入数组:

IFS=, read -rA array < file.txt

也适用于zshyash。由于某种原因,bash多年后,选择使用-a而不是-A为此。

ksh93 还可以进行 CSV 解析-S(处理跨多行的引号和值):

IFS=, read -rSA array < file.txt

例如,包含file.txt

"foo  bar",,"blah""blah
blah"

这给出:

$ typeset -p array
typeset -a array=('foo  bar' '' $'blah"blah\nblah')

拆分整个文件在逗号上,您可以使用 split+glob (在 unquoted 上隐式完成$(<file))并禁用 glob:

set -o noglob
IFS=,
array=( $(<file.txt) )

或者为了与 ksh88 / pdksh 兼容:

set -o noglob
IFS=,
set -A array -- $(<file.txt)

请注意$(<...),还会删除尾随的换行符。

另请注意,如果文件以 a 结尾,(这也适用于read上面的情况,甚至 with -S,除了zsh),不会创建额外的尾随空元素(,被视为分隔符, 不是分隔器,尽管Sin$IFS可能会建议)。

相关内容