数组
A
存储此 awk 脚本的输出:
A=(`awk 'BEGIN{
z[1]=4;z[2]=7;z[3]=5;
w[1]="how are you?"; w[2]="fine and you?"; w[3]="fine, thank you";
for (i = 1; i <=3; i++ ) {
printf("%s|%s\n",w[i],z[i])
}
}'`)
数组
A
应该存储这 3 行:
A[1] = "how are you?|4"
A[2] = "fine and you?|7"
A[3] = "fine, thank you|5"
但是当我尝试分割
A
内每一行的内容时,即使我设置了IFS ='|'
,也会将空格作为字段分隔符,因为
当我发送这个 for 循环脚本时
n=${#A[*]}
for ((i=0; i<=n; i++)); do
IFS='|' read -ra B <<< "${A[$i]}"
echo "String: " ${B[0]} ", value: " ${B[1]}
done
我得到这个输出:
String: how , value:
String: are , value:
String: you? , value: 4
String: fine , value:
String: and , value:
String: you? , value: 7
String: fine, , value:
String: thank , value:
String: you , value: 5
String: , value:
我的预期输出是这样的:
STRING: how are you?, VALUE: 4
STRING: fine and you?, VALUE: 7
STRING: fine, thank you, VALUE: 5
如何解决这个问题?我想保留这个脚本的结构,因为它是另一个具有类似输出的更大 awk 脚本的一部分。预先感谢。
OP 的当前代码将每个空格分隔的单词存储为数组中的单独条目。我们通过以下内容看到这一点:
$ typeset -p A
declare -a A=([0]="how" [1]="are" [2]="you?|4" [3]="fine" [4]="and" [5]="you?|7" [6]="fine," [7]="thank" [8]="you|5")
将 awk
输出的每个
line存储为单独的数组条目的一些想法:
# let bash map each line as a separate array entry
mapfile -t A < <( awk '...' )
readarray -t A < <( awk '...' ) # readarray is a synonym for mapfile
# use a while/read loop to process each line separately
A=() # init array
while read -r line
do
A+=( "${line}" ) # add ${line} as a new array entry
done < <( awk '...' )
所有这些都会产生:
$ typeset -p A
declare -a A=([0]="how are you?|4" [1]="fine and you?|7" [2]="fine, thank you|5")