【问题标题】:Bash: Is there a way to easily break a large array into smaller ones?Bash:有没有一种方法可以轻松地将大数组分解成更小的数组?
【发布时间】:2012-07-09 03:26:43
【问题描述】:

我想知道 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

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

【问题讨论】:

    标签: arrays bash split


    【解决方案1】:

    如果你有 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}" )
    

    【讨论】:

    • 您已经展平了阵列。你需要smallArray=("${bigArray[@]:0:$cnt1}"),元素中的空格就可以了。此外,Bash 3.2 和 4 都支持切片。
    • 谢谢!这正是我所需要的!
    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2012-08-08
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多