Bash脚本循环遍历带有分隔符逗号+空格的数字数组

时间:2017-01-25 01:33:47

标签: arrays bash loops

我想遍历数组并在bash脚本中打印出每个元素:

array=(10, 0.2, 0.03,)
for ele in ${array[@]}
do
echo "$ele blah" 
done

然而,它吐了出来:

10, blah
 blah
0.2, blah
 blah
0.03 blah

即使我添加了

IFS=","

结果是:

10 blah
 blah
0.2 blah
 blah
0.03 blah

我怎样才能得到:

10 blah
0.2 blah
0.03 blah

在此之后,我想将每一行对齐如下:

10.00      blah
0.200      blah
0.030      blah
  

更新:

     

第1和第2列分隔6个空格

有没有简单的方法可以做到这一点?感谢。

2 个答案:

答案 0 :(得分:3)

删除数组声明中的逗号。

array=(10 0.2 0.03)

您可能还希望在for循环中加倍扩展,除非您100%确定分词不会导致问题(请注意,在您的示例数据的情况下,它不会)。

for ele in "${array[@]}"

要格式化输出,请尝试(而不是echo

printf "%06.3f      blah\n" "$ele"

如果在小数点分隔符之前需要更多数字,则需要增加%符号后的数字,如果不需要,则删除0以避免打印前导零。例如:

printf "%10.3f      blah\n" "$ele"

答案 1 :(得分:0)

您可以删除逗号:

for ele in `echo ${array[@]} | sed 's/,//g'`;

而不是

for ele in ${array[@]}

sed是一个非常有用的工具,用于在文本中进行小操作,例如使用“s”函数替换。绝对值得玩:)

对于对齐,您可以使用制表符而不是空格和printf而不是echo。所以使用:

printf "%-10.3fblah\n" $ele

而不是

echo "$ele blah"