我有一个文件夹,里面装满了 1979 年至 2018 年每日数据的 nc 文件。我希望将其全部合并到一个 NC 中,但是当我尝试列出文件以创建 ferret 脚本时,顺序发生了更改。我在下面给出了我的数据文件名称的示例。
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
当我列出它们时,日期正在更改我尝试使用 shell 脚本中的代码来使用命令更改文件的名称sed
。
ls *.nc >temp
for i in {1..9..1}
do
sed "s/_${i}_UVP/_0${i}_/g"
done < temp
有人可以在这方面帮助我吗?
答案1
请注意,对于 GNU ls
,如果您传递-v
选项 (版本sort),这些文件将按时间顺序列出。
如果您使用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
如果满意,请删除(试运行))
用sl
来 ef-pad到这些月份和日期0
的宽度。2
答案2
您遇到的问题是文件的顺序。ls
按字母顺序对它们进行排序,但您希望它们以不同的方式排序。
ls *.nc |sort -t_ -k2 -k3 -k4 -n
将告诉sort
使用_
作为字段分隔符,然后-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
测试并运行良好