정렬 순서 설명

정렬 순서 설명

많은 파일이 주어지면 sort -n다음과 같은 결과가 나왔습니다.

f1.txt
f10.txt
f2.txt

이것은 나에게 옳지 않은 것 같습니다. 설명은 무엇입니까?

기본적으로 이것을 얻을 수 있습니까?

f1.txt
f2.txt
f10.txt

답변1

나는 사용하는 것이 좋습니다

sort -V data.txt

-V"버전 정렬"을 의미하며 기본적으로 알파벳과 숫자를 올바르게 처리하므로 파일이 더 많은 경우 다음과 같이 말하세요.

f1.txt
f10.txt
f2.txt
a1.txt
a10.txt
a2.txt

그리고 sort -V그걸 너한테 줘

a1.txt
a2.txt
a10.txt
f1.txt
f2.txt
f10.txt

또는 :sort -k 1.2nsort -n -k 1.2

a1.txt
f1.txt
a2.txt
f2.txt
a10.txt
f10.txt

답변2

데이터 케이블이 없기 때문에시작숫자의 경우 -n단일 정렬은 숫자를 숫자가 아닌 것으로 처리합니다(따라서 원래 위치에 둡니다). 더 이상 데이터를 숫자로 해석할 수 없게 되면 -n관리를 중단합니다. 당신은 사용해야합니다-k눈 정렬 옵션:

sort -k 1.2n data.txt

두 번째 문자부터 시작하여 첫 번째 필드에 정의된 키를 사용하여 정렬하고 해당 지점부터 숫자 비교를 사용합니다.

답변3

GNU 정렬-n옵션 과 함께 사용strnumcmp()이러지 마세요숫자 변환(numcompare() 함수 참조). 이것은 순전히 문자열 비교입니다.

키 필드가 숫자로 시작하지 않는 경우 마지막 정렬 방법은 바이트별로 정렬되며 로케일에 따라 알파벳순 결과를 얻게 됩니다.

예:

$ LC_ALL=en_US.utf8 sort -n test.txt
f10.txt
f1.txt
f2.txt

$ LC_ALL=C sort -n test.txt
f1.txt
f10.txt
f2.txt

답변4

를 사용하는 경우 다음 zsh을 사용하여 목록을 숫자순으로 정렬할 수 있습니다.

printf '%s\n' *.txt(n)

이는 GNU sort -v나 GNU ls-v정렬과 유사합니다:

ls -vd -- *.txt

정렬 f2f10, g1정렬 후 f2.

배열에 저장된 목록을 정렬합니다 zsh(와일드카드를 사용하여 현재 디렉터리의 파일을 정렬하는 대신).

files=(
  f1.txt
  f10.txt
  f2.txt
)
printf '%s\n' ${(n)files}    

관련 정보