web-dev-qa-db-ja.com

文字と数字をbashで組み合わせて配列を並べ替えるにはどうすればよいですか?

h4 h5 h1 h2 h3を含む配列があり、番号に従って並べ替えたいのですが、方法がわかりません。これを行うための最良の方法は何ですか?

edit1:s4 h5 q1 h2 g3のように、異なる文字を含む数字で配列を並べ替えたいと思います。

2
Mercyfon

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
2
RudiC

これを試して、

値を同じ配列名で出力、並べ替え、保存するだけです。

ary=(h4 h5 h1 h2 h3)
ary=(`printf '%s\n' "${ary[@]}"|sort`)

echo ${ary[@]}
h1 h2 h3 h4 h5
2
Siva

配列Aを次のように取りましょう

A=(h4 h5 h1 h2 h3)

さて、sortコマンドの問題は、異なる行の要素をソートし、同じ行の要素をソートできないことです。したがって、回避策は、配列を1行あたりの要素に変換し、sortで並べ替えて、実際に並べ替えられる配列に配置することです。

B=(`echo ${A[@]} | tr " " "\n" | sort`)

ここで、Bはソートされた配列です。ここで、trはスペースを改行に変換します

1
Ritajit Kundu