Bash:有没有办法轻松地将大型阵列分解成较小的阵列?

时间:2012-07-09 17:23:31

标签: arrays bash split

我想知道在bash中是否有一种简单的方法可以将大数组分成几个较小的数组。 我目前正在考虑这样的事情:

for ((i = 0; i<= (bigArrayLength/2); i++))  do   
bigArray[i] = smallArray[i]  
done

for ((i = (bigArrayLength/2); i <=bigArrayLength; i++))  
do  
bigArray[i] = secondSmallArray[i]  
done

但必须有更好的方法来解决它。 有什么建议? 谢谢!

1 个答案:

答案 0 :(得分:4)

如果你有bash版本3.2或更高版本,你可以使用新的“子元素”语法(${bigArray[@]:index_of_first_element:element_count})来完成它,但要小心 - 如果元素值中有任何空格,这个没有预处理就可能会破坏。

所以这个想法是这样的:

cnt="${#bigArray[@]}"
let cnt1="$cnt/2"
let cnt2="$cnt - $cnt1 - 1"
# this way we remove the rounding error if the count was odd and account for 0-based indexing

smallArray=( "${bigArray[@]:0:$cnt1}" )
secondSmallArray=( "${bigArray[@]:$cnt1:$cnt2}" )