在不打开文件的情况下使用 bash 从 nc header 中提取日期
extracting vdate form nc header with bash without opening file
我必须通过将 header 中的 vdate 添加到其标题来更改几百个文件的标题。
如果vdate = 19971222,那么我希望那个nc文件的名字变成rerun4_spindown_19971222.nc
我知道我可以通过 ncdump -h filename
找到 vdate(参见下面的示例 header)。
ncdump -h rerun4_1997_spindown_09191414_co2
netcdf rerun4_1997_spindown_09191414_co2 {
dimensions:
lon = 768 ;
lat = 384 ;
nhgl = 192 ;
nlevp1 = 96 ;
spc = 32896 ;
// global attributes:
:file_type = "Restart history file" ;
:source_type = "IEEE" ;
:history = "" ;
:user = " Linda" ;
:created = " Date - 20190919 Time - 134447" ;
:label_1 = " Atmospheric model " ;
:label_2 = " Library 23-Feb-2012" ;
:label_3 = " Lin & Rood ADVECTION is default" ;
:label_4 = " Modified physics" ;
:label_5 = " Modified radiation" ;
:label_6 = " Date - 20190919 Time - 134447" ;
:label_7 = " Linda " ;
:label_8 = " Linux " ;
:fdate = 19950110 ;
:ftime = 0 ;
:vdate = 19971222 ;
:vtime = 235800 ;
:nstep = 776158 ;
:timestep = 120. ;
但是,然后我必须手动打开所有文件并手动更改文件的标题...数百个文件。我更愿意制作一个可以自动执行此操作的 bash。
我相信一定有更智能的方法从 nc 中提取 vdate header,你们能帮帮我吗?
谢谢!
理论上,类似的东西应该有效:
#! /bin/sh
for file in rerun4_*_spindown_* ; do
vdate=$(ncdump -h $file | awk ' == ":vdate" { print }')
new_name="rerun4_spindown_$vdate.nc"
mv "$file" "$new_name"
done
我无法访问 netCDF 文件 - 需要更多测试。
我必须通过将 header 中的 vdate 添加到其标题来更改几百个文件的标题。
如果vdate = 19971222,那么我希望那个nc文件的名字变成rerun4_spindown_19971222.nc
我知道我可以通过 ncdump -h filename
找到 vdate(参见下面的示例 header)。
ncdump -h rerun4_1997_spindown_09191414_co2
netcdf rerun4_1997_spindown_09191414_co2 {
dimensions:
lon = 768 ;
lat = 384 ;
nhgl = 192 ;
nlevp1 = 96 ;
spc = 32896 ;
// global attributes:
:file_type = "Restart history file" ;
:source_type = "IEEE" ;
:history = "" ;
:user = " Linda" ;
:created = " Date - 20190919 Time - 134447" ;
:label_1 = " Atmospheric model " ;
:label_2 = " Library 23-Feb-2012" ;
:label_3 = " Lin & Rood ADVECTION is default" ;
:label_4 = " Modified physics" ;
:label_5 = " Modified radiation" ;
:label_6 = " Date - 20190919 Time - 134447" ;
:label_7 = " Linda " ;
:label_8 = " Linux " ;
:fdate = 19950110 ;
:ftime = 0 ;
:vdate = 19971222 ;
:vtime = 235800 ;
:nstep = 776158 ;
:timestep = 120. ;
但是,然后我必须手动打开所有文件并手动更改文件的标题...数百个文件。我更愿意制作一个可以自动执行此操作的 bash。
我相信一定有更智能的方法从 nc 中提取 vdate header,你们能帮帮我吗?
谢谢!
理论上,类似的东西应该有效:
#! /bin/sh
for file in rerun4_*_spindown_* ; do
vdate=$(ncdump -h $file | awk ' == ":vdate" { print }')
new_name="rerun4_spindown_$vdate.nc"
mv "$file" "$new_name"
done
我无法访问 netCDF 文件 - 需要更多测试。