シェルスクリプトで順序を変更せずにリストする方法は?

シェルスクリプトで順序を変更せずにリストする方法は?

1979年から2018年までの日々のデータが入ったncファイルがいっぱいのフォルダがあります。 1つのNCに統合したいのですが、ペレットスクリプトを生成するためにファイルをリストしようとすると順序が変わりますね。以下にデータファイル名の例を示します。

ERA5_2018_9_12_UVP.nc
ERA5_2018_9_13_UVP.nc
ERA5_2018_9_14_UVP.nc
ERA5_2018_9_15_UVP.nc
ERA5_2018_9_16_UVP.nc
ERA5_2018_9_17_UVP.nc
ERA5_2018_9_18_UVP.nc
ERA5_2018_9_19_UVP.nc
ERA5_2018_9_1_UVP.nc
ERA5_2018_9_20_UVP.nc
ERA5_2018_9_21_UVP.nc
ERA5_2018_9_22_UVP.nc
ERA5_2018_9_23_UVP.nc
ERA5_2018_9_24_UVP.nc

日付を一覧表示すると、日付が変更されます。コマンドを使用してファイル名を変更するには、シェルスクリプトのコードを使用しようとしていますsed

ls *.nc >temp
    for i in {1..9..1}
    do
    sed "s/_${i}_UVP/_0${i}_/g"
    done < temp

誰でも助けることができますか?

ベストアンサー1

GNUのls場合は-vオプション(バージョンソート)、ファイルは時系列でリストされます。

n次のようにglob修飾子(またはnumericglobsortオプション)を使用しても同じですzsh

combine-nc-files ./*.nc(n)

これで名前を変更するには、zsh次を使用して実行できます。

autoload -Uz zmv # best in ~/.zshrc
zmv -n '(*_<1979-2018>_)(<1-12>)_(<1-31>)(_UVP.nc)' \
       '$1${(l[2][0])2}_${(l[2][0])3}$4'

-n満足すれば削除(試運転))

sを使用して、その月と日の幅をlef-padに設定します。02

おすすめ記事