텍스트와 숫자가 혼합된 입력이 있는 경우(앞에 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