我想知道在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
但必须有更好的方法来解决它。 有什么建议? 谢谢!
答案 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}" )