숫자와 문자를 역순으로 정렬하시겠습니까?

숫자와 문자를 역순으로 정렬하시겠습니까?

다음과 같은 파일 목록이 있습니다.

100119329_d01.png
100119329_d08.png
100119329_d02.png
100119329_d05.png
100119329_d03.png
100119329_d04.png
100119329_d07.png
100119329_f02.png
100119329_f01.png

다음 출력을 얻기 위해 숫자로 정렬한 다음 이전 문자로 역순으로 정렬하고 싶습니다.

100119329_f01.png
100119329_f02.png
100119329_d01.png
100119329_d02.png
100119329_d03.png
100119329_d04.png
100119329_d05.png
100119329_d07.png
100119329_d08.png

나는 시도했다:

cat <file> |sort -k1.11r -k1.12,1.13n

그러나 한 번에 하나의 주장만 유효합니다. 그래서 숫자나 역순으로만 정렬할 수 있습니다. 두 가지를 동시에 작동시키려면 어떻게 해야 합니까?

답변1

11번째 문자만 역순으로 정렬합니다.

sort -k1.11,1.11r -k1.12,1.13n infile

이 경우(0으로 채워진 숫자) 간단히 실행할 수 있습니다.

sort -k1.11,1.11r infile

답변2

이후에 zsh를 사용하여 해당 순서대로 파일을 처리하는 것이 목표인 경우 glob 한정자를 사용하여 정렬을 수행할 수 있습니다.

$ print -rC1 -- *_?[0-9][0-9].png(Oe['REPLY=$REPLY[-7]$((200-REPLY[-6,-5]))'])
100119329_f01.png
100119329_f02.png
100119329_d01.png
100119329_d02.png
100119329_d03.png
100119329_d04.png
100119329_d05.png
100119329_d07.png
100119329_d08.png

정렬 키를 다음과 같이 정의하는 일부 코드의 평가를 기반으로 O역방향(대문자)으로 정렬 합니까?e편지이미 200명을 팔로우했습니다 -숫자. 그래서 열쇠 100119329_f01.pngf199, 열쇠 100119329_a99.png는 입니다 a101.

이러한 파일에 대해 다른 작업을 수행하려면 다음을 수행하십시오.

for file ( *_?[0-9][0-9].png(Oe['REPLY=$REPLY[-7]$((200-REPLY[-6,-5]))']) )
  anything-else-with -- $file

예를 들어.

관련 정보