배열이 있고 h4 h5 h1 h2 h3
숫자를 기준으로 정렬하고 싶지만 방법을 모르겠습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
edit1: 또한 다른 문자가 포함된 숫자로 배열을 정렬하고 싶습니다(예: ) s4 h5 q1 h2 g3
.
답변1
사용할 필요가 없습니다 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
이 시도,
동일한 배열 이름에 값을 인쇄하고 정렬하고 저장하면 됩니다.
ary=(h4 h5 h1 h2 h3)
ary=(`printf '%s\n' "${ary[@]}"|sort`)
echo ${ary[@]}
h1 h2 h3 h4 h5
답변3
A
배열을 다음 과 같이 생각해보자
A=(h4 h5 h1 h2 h3)
이제 이 명령의 문제점은 sort
다른 행의 요소를 정렬하지만 동일한 행의 요소를 정렬할 수 없다는 것입니다. 따라서 해결책은 배열을 행당 하나의 요소로 변환하고 정렬하여 sort
실제 정렬된 배열에 넣는 것입니다.
B=(`echo ${A[@]} | tr " " "\n" | sort`)
이제 B는 정렬된 배열입니다. 여기서 tr
공백을 줄 바꿈으로 변환하십시오.