디렉토리 및 파일 정렬

디렉토리 및 파일 정렬

find응답을 사용하고 정렬하고 싶습니다 . 나는 간단한 파이프라인이 find ... | sort그 일을 해낼 것이라고 생각했지만, 정렬 동작이 이상합니다. 작업을 단순하게 유지하려면 간단한 텍스트 파일을 사용하세요.

asdf/2/22
asdf/2/01
asdf/20/0
asdf/20/1

내 예상 결과는

asdf/2/01
asdf/2/22
asdf/20/0
asdf/20/1

또는

asdf/20/0
asdf/20/1
asdf/2/01
asdf/2/22

디렉토리가 그룹에 나타나기를 원하기 때문에 중요하지 않습니다.

내 시도는 다음과 같습니다.

[root@linux6 ~]# cat sort_test | sort
asdf/20/0
asdf/2/01
asdf/20/1
asdf/2/22
[root@linux6 ~]# cat sort_test | sort -d
asdf/20/0
asdf/2/01
asdf/20/1
asdf/2/22
[root@linux6 ~]# cat sort_test | tr "/" "X" | sort
asdfX20X0
asdfX20X1
asdfX2X01
asdfX2X22
[root@linux6 ~]# cat sort_test | tr "/" "_" | sort
asdf_20_0
asdf_2_01
asdf_20_1
asdf_2_22
[root@linux6 ~]#

"X"에서만 작동한다는 점에 유의하세요. 영숫자가 아닌 문자가 있으면 출력이 손상된 것 같습니다. 나는 또한 출력에 변화가 없는 옵션을 -s시도 했습니다.-t '/'

sort정렬할 -d항목이 없다고 언급했는데도 영숫자가 아닌 문자가 먼저 제거된 다음 행이 정렬되는 것 같습니다.alias

[root@linux6 ~]# which sort
/usr/bin/sort
[root@linux6 ~]# uname -a
Linux i-epg-appl1 3.10.0-229.14.1.el7.x86_64 #1 SMP Tue Sep 15 15:05:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@linux6 ~]# sort --version
sort (GNU coreutils) 8.22

답변1

첫째, /로케일에서 정렬할 때 무시됩니다(대부분의 로케일에서 컬렉션 사양의 마지막 가중치를 제외한 모든 항목은 GNU 시스템(내 데비안 시스템)에 있음을 알 수 있습니다 ) . /따라서 정렬 기준 은 정렬과 같습니다. , 마치 당신이 사용한 적이 있는 것처럼 .IGNORE<U002F> IGNORE;IGNORE;IGNORE;<U002F> # 45 //usr/share/i18n/locales/iso14651_t1_commonasdf/20/0asdf/2/01asdf200asdf201-d

로케일을 C로 변경할 수 있습니다. 여기서 정렬은 바이트 값만을 기준으로 합니다(그리고 /정렬이 발생하는 경우도 있습니다).앞으로숫자)이므로 이전과 같이 정렬되지만 asdf/2/01예 를 들어 여전히 이의 제기 문제가 있습니다 .asdf/20/0/0asdf/2asdf/10

-g여기에서 GNU 특정 / 옵션을 사용 --general-numeric-sort하거나 다음을 수행할 수 있습니다.

sort -nt/ -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 -k9,9

각 디렉토리 구성 요소를 숫자로 처리합니다(이렇게 하면 앞에 2_가 정렬됩니다).

를 사용하면 zsh다음을 수행할 수 있습니다.

printf '%s\n' **/*(Dn)

재귀적인 전역 숫자 정렬을 수행합니다.

답변2

따라서 질문을 요약하기 위해 답변은 LC_COLLATE@don_crissti가 댓글에서 언급한 내용으로 설정됩니다.

$ LC_COLLATE=C sort infile

관련 정보