[bash] 配列をソート、検索でbashの配列操作について書いたけど、配列をset(集合)として取り扱いたい場合の操作について。
※bash4以降では連想配列が使えるので、bash4前提であれば、そっちを使ったほうがいいかも。
要素の順序は気にしない。
※bash4以降では連想配列が使えるので、bash4前提であれば、そっちを使ったほうがいいかも。
配列をユニークにする
まずは配列から重複している要素を削除して、ユニークにする。要素の順序は気にしない。
arr=( 1 2 3 4 5 2 4 6 ) uniq_set=$( printf "%s\n" "${arr[@]}" | sort -u ) echo ${uniq_set[@]} # 1 2 3 4 5 6
集合のマージ
重複している要素を考慮して、2つの集合をマージする。set1=( 1 2 3 4 5 ) set2=( 1 3 5 7 9 ) set3=( $( { printf "%s\n" "${set1[@]}" printf "%s\n" "${set2[@]}" } | sort -u ) ) echo ${set3[@]} # 1 2 3 4 5 7 9
集合からの削除
集合1から集合2の要素を全て削除する。arr=( 1 2 3 4 5 ) del=( 2 4 ) del_str=$( printf "%s\n" "${del[@]}" ) arr=( $( printf "%s\n" ${arr[@]} | grep -v -F -e "$del_str" ) ) echo ${arr[@]} # 1 3 5
0 件のコメント:
コメントを投稿