Linux

在文件名中以科學計數法書寫的更改編號

  • December 17, 2021

我要製作圖像文件的影片,但文件名包含科學計數法的數字,因此名稱的順序將不正確。

文件名採用以下格式:

ABC_1.000000E-01.png ~ ABC_1.100000E+01.png,
DEF_1.000000E-01.png ~ DEF_1.100000E+01.png,
GHI_1.000000E-01.png ~ GHI_1.100000E+01.png,
.
.
.

如果我更改用於數字的數字元號,則順序再次不正確,因此我想將其更改如下。

ABC_001.png ~ ABC_110.png,
DEF_001.png ~ DEF_110.png,
GHI_001.png ~ GHI_110.png,
.
.
.

如何在我的 Linux 系統上執行此操作?

也試試

ls -1 *.png | LC_ALL=C awk -F[._] '{TMP=$2 "." $3; printf "mv %s  %s_%03d.%s\n", $0, $1, 10*TMP, $4}'                  
mv ABC_1.000000E-01.png  ABC_001.png
mv ABC_1.100000E+01.png  ABC_110.png
mv DEF_1.000000E-01.png  DEF_001.png
mv DEF_1.100000E+01.png  DEF_110.png
mv GHI_1.000000E-01.png  GHI_001.png
mv GHI_1.100000E+01.png  GHI_110.png

它用於awk隔離和轉換科學計數法中的數字,並將其十倍值輸出為填充零的整數。sh例如,如果對結果感到滿意,請通過管道。

這是一個腳本,它將找到目前目錄中的每個 png 文件並相應地重命名它們。請注意,它不會覆蓋現有文件。


這是作品的預覽

./DEF_1.100000E+01.png - ./DEF_11.00.png
./DEF_1.000000E-01.png - ./DEF_0.10.png
./GHI_1.000000E-01.png - ./GHI_0.10.png
./ABC_1.100000E+01.png - ./ABC_11.00.png
./GHI_1.100000E+01.png - ./GHI_11.00.png
./ABC_1.000000E-01.png - ./ABC_0.10.png

劇本前

$ ls
ABC_1.000000E-01.png  DEF_1.000000E-01.png  GHI_1.000000E-01.png  script.sh
ABC_1.100000E+01.png  DEF_1.100000E+01.png  GHI_1.100000E+01.png

腳本之後

$ ls
ABC_0.10.png   DEF_0.10.png   GHI_0.10.png   script.sh
ABC_11.00.png  DEF_11.00.png  GHI_11.00.png

腳本

#!/bin/bash

for file in $(find . -type f -name "*.png")
do
   number=$(echo "${file}" | cut -d'_' -f 2)
   number=$(basename "${number}" .png)
   number=$(echo "${number}" | awk '{ printf("%.2f\n",$1) }')

   filename=$(echo "${file}" | cut -d'_' -f 1)

   mv -n "${file}" "${filename}_${number}.png"
done

引用自:https://unix.stackexchange.com/questions/682803