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を使用して、その月と日の幅をl
ef-padに設定します。0
2
答え2
あなたが経験している問題はファイルの順序です。ls
アルファベット順に並べ替えますが、別々に並べ替えたいです。
ls *.nc |sort -t_ -k2 -k3 -k4 -n
フィールド区切り文字としてsort
使用し、2番目、3番目、4番目のフィールド()を数値で並べ替えるように指示します。_
-n
答え3
#!/usr/bin/python
import os
import glob
file=[]
arr=[]
for i in glob.glob('*.nc'):
file.append(i.strip())
for g in file:
arr.append(g.split('_')[3])
arr.sort()
for er in arr:
for nh in file:
p=nh.split('_')[3]
if (p == er ):
print nh
テストを経てうまく機能しました