for循环中awk中的变量



我的bash脚本有问题。

for b in O B A F G K M
do   
u='$n'$b  
w='$m'$b  
awk -v "j=$u" -v "h=$b" 'BEGIN{printf(" "h" stars: %6d  ", j)}'  
awk -v "i=$w" 'BEGIN{printf("%"i"sn", "[]")}' | sed 's/ /[]/g'  
done

我需要使用称为";nO";那么";nB";等等。我的老师建议在awk之前将这些值分配给另一个变量,但当我这样做时,它只会打印"$nO";而不是像";200〃;。如何做到这一点?我需要这样的东西:awk-v j=$[n$b],所以在第一个循环中,j被赋予变量nO的值,然后是nB的值。(这些nO或mO已在前面定义。

当您有nO=200时,您可以在u="n$b"中使用b=O,并获得值

awk -v "j=${!u}" -v "h=$b" 'BEGIN{printf(" "h" stars: %6d  ", j)}'

!将查找它引用的变量。

您也可以使用;nameref";(在bash 4.3中介绍(

nB=Hello mB=World
letter=B
declare -n u="n$letter" w="m$letter"
awk -v j="$u" -v h="$w" 'BEGIN {print "j is " j; print "h is " h}'
j is Hello
h is World

或者,重新构造shell脚本以使用关联数组(bash 4.0(:

declare -A n m
n[B]=foo
m[B]=bar
letter=B
awk -v j="${n[$letter]}" -v h="${m[$letter]}" 'BEGIN {print "j is " j; print "h is " h}'

相关内容

  • 没有找到相关文章

最新更新