파일 이름 정렬

파일 이름 정렬

파일 이름을 이렇게 정렬하려면 어떻게 해야 하나요?

B-100.txt
B-11.txt
A-03.txt
A-01.txt
C-110.txt
C-10.txt

이것에 들어가나요?

B-11.txt
B-100.txt
A-01.txt
A-03.txt
C-10.txt
C-110.txt

접두사 순서(ABC 대신 B, A, C)를 유지하고 싶지만 끝에 있는 숫자를 알파벳순이 아닌 숫자순으로 정렬하고 싶습니다. 숫자는 다음과 같습니다

01, 02, ....10, 11, ....100, 101, ...

모든 파일 이름에는 항상 접두사 부분과 숫자 부분을 구분하는 하이픈이 있습니다.

일부 소프트웨어에서 내보낸 파일의 파일 이름을 정렬하고 싶은데 소프트웨어가 자동으로 마지막에 이 특수 일련 번호를 추가하므로 이러한 파일 이름의 정렬된 목록을 생성하는 데 문제가 있습니다. 정렬하기 전에 파일 이름을 바꿀 수 없습니다.

답변1

(
  SECTION=""
  OLDPREFIX="-invalid"
  while read LINE
  do
    PREFIX="${LINE/-*/}"
    if [ "$PREFIX" == "$OLDPREFIX" ]
    then
      SECTION="$SECTION"$'\n'"$LINE"
    else
      echo "$SECTION" | tail -n +2 | sort -V
      SECTION=$'\n'"$LINE"
      OLDPREFIX="$PREFIX"
    fi
  done
  echo "$SECTION" | tail -n +2 | sort -V
) <<'EOF'
B-100.txt
B-11.txt
A-03.txt
A-01.txt
C-110.txt
C-10.txt
EOF

답변2

저는 레드햇 리눅스를 사용하고 있습니다.

$ awk -F- '!A[$1]++{print $1}' input.txt | while read px; do grep "$px" input.txt | sort -n -t- -k2; done
B-11.txt
B-100.txt
A-01.txt
A-03.txt
C-10.txt
C-110.txt

$ cat input.txt
B-100.txt
B-11.txt
A-03.txt
A-01.txt
C-110.txt
C-10.txt

관련 정보