많은 파일이 주어지면 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.2n
sort -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
정렬 f2
전 f10
, g1
정렬 후 f2
.
배열에 저장된 목록을 정렬합니다 zsh
(와일드카드를 사용하여 현재 디렉터리의 파일을 정렬하는 대신).
files=(
f1.txt
f10.txt
f2.txt
)
printf '%s\n' ${(n)files}