혼합된 텍스트와 숫자(예: 호스트 이름)를 정렬하는 방법은 무엇입니까?

혼합된 텍스트와 숫자(예: 호스트 이름)를 정렬하는 방법은 무엇입니까?

텍스트와 숫자가 혼합된 입력이 있는 경우(앞에 0이 붙지 않음), "자연스러운" 순서로 정렬하려면 어떻게 해야 하나요? 예를 들어, 다음 입력(호스트 이름)이 주어지면:

whatever-1.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org

나는 다음과 같은 출력을 원합니다.

whatever-1.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org

편집하다

"무엇이든" 외에도

thingaroo-#.example.org
      .
      :

blargh-#.example.org
      .
      :

...etc...

감사해요!

답변1

GNU coreutils ≥ 7.0인 경우 버전 순서 지정을 사용할 수 있습니다. 일련의 숫자가 십진 정수 값에 따라 정렬된다는 점을 제외하면 이는 사전식 순서입니다.

sort -V

답변2

특정 유형의 입력을 성공적으로 정렬할 수 있습니다.

sort -t - -nk2,2

그러나 원하는 경우 모든 유형의 파일 이름에 실제로 일반화되지는 않습니다.

답변3

죄송합니다. 원래 질문에 필요한 모든 정보를 제공하지 않았습니다. 모든 답변은 제가 정말로 원하는 것을 찾는 데 도움이 되었습니다. 내가 사용한 것은 다음과 같습니다.

sort -t- -k1,1 -k2,2

어디:

-t-       divide the hostnames into fields using dash (-) rather than spaces
-k1,1     the first sort key is the first field (from 1 to 1), a normal sort
-k2,2     the second key is the second field using a numeric (n) sort
          (the field includes the ".example.org" but the numeric sort
          seems to cope find with the trailing non-number chars)

결과는 다음과 같습니다.

blargh-1.example.org
    :
blargh-13.example.org
thingaroo-1.example.org
    :
thingaroo-17.example.org
whatever-1.example.org
    :
whatever-13.example.org

답변4

sort -t- -k2n file

whatever-1.example.org
whatever-2.example.org
whatever-3.example.org
whatever-4.example.org
whatever-5.example.org
whatever-6.example.org
whatever-7.example.org
whatever-8.example.org
whatever-9.example.org
whatever-10.example.org
whatever-11.example.org
whatever-12.example.org
whatever-13.example.org

관련 정보