对文件名排序

对文件名排序

我怎样才能像这样对文件名进行排序

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, ...

每个文件名中始终有一个连字符,它分隔前缀部分和数字部分。

我想对从某些软件导出的文件的文件名进行排序,并且该软件会自动在末尾添加这种特殊的序列号,因此我在生成这些文件名的排序列表时遇到了麻烦。我无法在排序之前重命名这些文件。

答案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

我正在使用红帽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

相关内容