如果我有这个awk命令......
echo $line | awk '{split($0,array,"|")}'
...我怎样才能在bash程序中使用数组?如果我稍后尝试从数组中打印出信息,那么它就是空的。
答案 0 :(得分:5)
您无法访问awk之外的awk变量,但您可以直接使用bash数据执行相同的操作
<body>
答案 1 :(得分:1)
如果您打印它,可以使用awk
以外的awk
数组内容:
IFS=$'\n' read -d '' -r -a line < <(echo 'o|p|s' | awk '{split($0,array,"|"); for (i in array) print array[i]}')
declare -p line
# OUTPUT: declare -a line='([0]="o" [1]="p" [2]="s")'
答案 2 :(得分:1)
bash中的另一个解决方案,如果我假设字段没有空间,那么只有1个赋值。
ln="apple|lemon|orange|strawberry" # eg
v=(${ln//|/ }) # substitute | with " " and vectorising with ()
# Now we are ready
# checking it:
for((i=0;i<${#v[@]};i++));do echo ${v[$i]}; done
apple
lemon
orange
strawberry
#or:
for i in ${v[@]}; do echo $i; done
apple
lemon
orange
strawberry
如果我们有一些空间但没有下划线&#34; _&#34;我们需要3个步骤。
ln="api ple|l em on|ora nge|s traw berry"
echo "$ln"
api ple|l em on|ora nge|s traw berry
ln=${ln// /_} # 1st
echo "$ln"
api_ple|l_em__on|ora__nge|s_traw___berry
v=(${ln//|/ }) # 2nd
for i in ${v[@]}; do echo $i; done
api_ple
l_em__on
ora__nge
s_traw___berry
for((i=0;i<${#v[@]};i++));do v[$i]="${v[i]//_/ }"; done # 3rd
for((i=0;i<${#v[@]};i++));do echo "${v[$i]}"; done
api ple
l em on
ora nge
s traw berry