[bash] 配列をソート、検索

2018年7月30日月曜日

bash シェルスクリプト

シェルスクリプトでは標準入力から読み込んで、標準出力に書き込むフィルターパターンが多いので、配列を使う機会はあまりないかもしれない。
でも、配列を使っている場面で配列をソートしたくなる時もある。
そんな時も簡単にやりたい。

もちろんsortコマンドで

シェルスクリプトはいろんなコマンドを組み合わせて、処理できるのがいいところなので、sortコマンドを使ってソートする。
arr=( 5 1 2 4 3 )

sorted_arr=( $( printf "%s\n" "${arr[@]}" | sort ) )
echo ${sorted_arr[@]}
# 出力
# 1 2 3 4 5
printf "%s\n" "${arr[@]}" で配列の要素間に改行を入れて、sortコマンドで渡してあげればいい。
それをさらに()で囲んで、配列を生成して、sorted_arrに格納する。

検索も

検索もgrepで同じようにすればいい。
arr=( 5 1 2 4 3 2 5 )

found_arr=( $( printf "%s\n" "${arr[@]}" | grep -e 3 -e 5 ) )
echo ${found_arr[@]}
# 出力
# 5 3 5