h4 h5 h1 h2 h3
を含む配列があり、番号に従って並べ替えたいのですが、方法がわかりません。これを行うための最良の方法は何ですか?
edit1:s4 h5 q1 h2 g3
のように、異なる文字を含む数字で配列を並べ替えたいと思います。
tr
を使用する必要はありません。適切なIFS
(サブシェル内)を使用したシェルの「パラメーター拡張」で十分です。試してみてください
$ ARR=(h4 h5 h1 h2 h3)
$ SA=( $(IFS=$'\n'; echo "${ARR[*]}" | sort) )
$ BRR=(s4 h5 q1 h2 g3)
$ SB=( $(IFS=$'\n'; echo "${BRR[*]}" | sort -k1.2) )
$ echo "${SB[*]}"
q1 h2 g3 s4 h5
これを試して、
値を同じ配列名で出力、並べ替え、保存するだけです。
ary=(h4 h5 h1 h2 h3)
ary=(`printf '%s\n' "${ary[@]}"|sort`)
echo ${ary[@]}
h1 h2 h3 h4 h5
配列A
を次のように取りましょう
A=(h4 h5 h1 h2 h3)
さて、sort
コマンドの問題は、異なる行の要素をソートし、同じ行の要素をソートできないことです。したがって、回避策は、配列を1行あたりの要素に変換し、sort
で並べ替えて、実際に並べ替えられる配列に配置することです。
B=(`echo ${A[@]} | tr " " "\n" | sort`)
ここで、Bはソートされた配列です。ここで、tr
はスペースを改行に変換します