ファイル名の並べ替え

ファイル名の並べ替え

ファイル名をこのようにソートするにはどうすればよいですか?

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

私はRed Hat Linuxを使用しています。

$ 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

関連情報