繁体   English   中英

将 awk 拆分数组返回到 bash 变量

[英]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")

这个怎么运作:

  1. readarray -tb

    这会从 stdin 读取行,然后将其放入 bash 数组b

  2. <<< "${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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM