我收集了一系列这样的数字
values=`sed -n "3,6p" STAT_EE/table_EE'.tex' | awk '{ print $4}'`
val=`sed -n "8,12p" STAT_EE/table_EE'.tex' | awk '{ print $4}'`
然后我想将它打印到列中的变量。我尝试使用echo -en "$values\t$val
,但它将两个变量打印为单个数组,我也尝试使用printf,但它没有用。
答案 0 :(得分:3)
首先,您定义的变量不是bash数组;他们是bash字符串。要创建数组,请将表达式括在括号中:
values=(`sed -n "3,6p" STAT_EE/table_EE'.tex' | awk '{ print $4}'`)
val=(`sed -n "8,12p" STAT_EE/table_EE'.tex' | awk '{ print $4}'`)
将它们分为两列:
for ((i=0;i<${#values[@]};i++))
do
echo "${values[i]} ${val[i]}"
done
或:
for i in $( seq 0 $((${#values[@]}-1)) )
do
echo "${values[i]} ${val[i]}"
done
由于反引号符号很脆弱且嵌套不好,因此通常首选%(...)
结构。此外,在上面的sed-awk
代码中,sed
仅用于选择行范围。这是awk
做得非常好的事情。因此,代码可以简化为:
values=( $(awk 'NR>=3 && NR<=6{ print $4}' STAT_EE/table_EE.tex) )
val=( $(awk 'NR>=8 && NR<=12{ print $4}' STAT_EE/table_EE.tex) )