Bash에서 문자와 숫자 배열을 정렬하는 방법은 무엇입니까? [복사]

Bash에서 문자와 숫자 배열을 정렬하는 방법은 무엇입니까? [복사]

배열이 있고 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공백을 줄 바꿈으로 변환하십시오.

관련 정보