打印包含列数的数组的变量

时间:2014-10-04 21:22:31

标签: arrays bash awk sed

我收集了一系列这样的数字

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,但它没有用。

你可以帮我解决这个问题吗?非常感谢

1 个答案:

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