awk后来在bash中拆分使用数组

时间:2016-04-21 23:34:56

标签: bash awk

如果我有这个awk命令......

echo $line | awk '{split($0,array,"|")}'

...我怎样才能在bash程序中使用数组?如果我稍后尝试从数组中打印出信息,那么它就是空的。

3 个答案:

答案 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