5

大きな配列をいくつかの小さな配列に分割する簡単な方法が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

しかし、それを回避するためのより良い方法がなければなりません。助言がありますか?ありがとう!

4

1 に答える 1

6

バージョン 3.2 以降の場合はbash、新しい「サブエレメント」構文 ( ${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}" )
于 2012-07-09T17:42:58.393 に答える