[英]Return awk split array to a bash variable
我需要在多字符分隔符上拆分字符串并将值返回到 Bash 中的数组中以供进一步处理
IFS 可以采用单个字符分隔符。
a="2;AAAAA;BBBBB;1111_MultiCharDel_2;CCCC;DDDDDD;22222_MultiCharDel_2;EEEE;FFFFFFF;22222"
awk'{split($0,ArrayDeltaMulDep,"_MultiCharDel_")}' <<< $a
输入字符串可以有多个由 MultiCharDel 分隔符分隔的子字符串。
如何在 Bash 中访问这个数组 ArrayDeltaMulDep fur 进一步处理?
您的示例字符串a
不包含换行符。 如果这在一般情况下是正确的,那么:
a="2;AAAAA;BBBBB;1111_MultiCharDel_2;CCCC;DDDDDD;22222"
readarray -t b <<< "${a//MultiCharDel/$'\n'}"
我们可以使用declare -p
来验证这是否正确拆分了字符串以显示b
的值:
$ declare -p b
declare -a b=([0]="2;AAAAA;BBBBB;1111_" [1]="_2;CCCC;DDDDDD;22222")
这个怎么运作:
readarray -tb
这会从 stdin 读取行,然后将其放入 bash 数组b
。
<<< "${a//MultiCharDel/$'\\n'}"
${a//MultiCharDel/$'\\n'}
使用模式替换将MultiCharDel
替换为换行符。 <<<
将结果作为 stdin 提供给命令readarray
。
帽子提示:切普纳
bash 字符串永远不会包含空字符(十六进制 00)。 使用 GNU sed:
b=()
while read -d '' -r line
do
b+=("$line")
done < <(sed 's/MultiCharDel/\x00/g; s/$/\x00/' <<<"$a")
这再次创建了一个具有所需拆分的数组:
$ declare -p b
declare -a b=([0]="2;AAAAA;BBBBB;1111_" [1]="_2;CCCC;DDDDDD;22222")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.