이름의 일부 하위 문자열을 기준으로 파일 이름 목록을 정렬하는 방법은 무엇입니까?

이름의 일부 하위 문자열을 기준으로 파일 이름 목록을 정렬하는 방법은 무엇입니까?

다음과 같은 이름을 가진 파일이 많이 있습니다.

beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf

num나는 이러한 파일 이름 목록을 다양한 s별로 정렬하고 정렬된 목록을 다양한 명령줄 유틸리티에 전달할 수 있기 를 원합니다 . 예를 들어, 기준으로 정렬하면 num2원하는 순서는 다음과 같습니다.

beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf

이 작업을 수행하는 Python 스크립트가 있지만 다음과 같습니다.~해야 한다sed및 같은 필터 외에는 아무것도 불가능합니다 sort.

일반적인 명령줄 필터를 사용하여 파일 이름의 일부를 기준으로 쉽게 정렬할 수 있는 방법이 있습니까?

답변1

sort옵션이 있는 GNU는 -g(--general-numeric-sort)이것을 할 수 있어야 합니다

sort -k5,5g -t '_'  <<!
beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf
!
beginning_num1_734_num2_1.363e+12_num3_800.pdf
beginning_num1_1007_num2_9.453e+12_num3_1200.pdf
beginning_num1_735_num2_7.453e+13_num3_800.pdf

관련 정보