自定义排序bash数组

时间:2014-11-08 02:55:46

标签: bash sorting

res[0]="b 9"
res[1]="a 1"
res[2]="c 10"
printf -- '%s\n' "${res[@]}"

我想对它进行排序并按bash中的数字顺序显示数组。

a 1
b 9
c 10

这可能吗?

1 个答案:

答案 0 :(得分:6)

sort排序:

res[0]="b 9"
res[1]="x 1"
res[2]="c 10"
printf -- '%s\n' "${res[@]}" | sort -k2 -n

输出:

x 1
b 9
c 10

<小时/> 没有sort的数字排序:

res[0]="b 9"
res[1]="x 1"
res[2]="c 10"
new=()                             # declare array new

# copy array res to new and use second column as index
for ((i=0;i<${#res[@]};i++)); do
  new[${res[$i]#* }]=${res[$i]% *}
done

# print array new and use its index: ${!new[@]}
for i in "${!new[@]}"; do
  echo "${new[$i]} $i"
done

输出:

x 1
b 9
c 10