Сортировка имен файлов

Как мне отсортировать такие имена файлов, как этот

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

Я бы хотел оставить порядок префиксов - -B, A, а затем C, а не ABC - как есть, но отсортируйте числа в конце по номерам, а не по алфавиту. Цифры выглядят как

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

В каждом имени файла всегда есть один дефис, который разделяет часть префикса и часть номера.

Я хотел бы отсортировать имена файлов, которые я экспортирую из некоторого программного обеспечения, и программное обеспечение автоматически добавляет такие странные серийные номера в конце, поэтому у меня возникают проблемы с созданием отсортированного списка этих имен файлов. Я не могу переименовать эти файлы перед сортировкой.

0
07.12.2016, 22:39
2 ответа
(
  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
0
28.01.2020, 04:49

Я использую Linux Red Hat.

$ 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
0
28.01.2020, 04:49

Теги

Похожие вопросы