извлечение vdate формы заголовка nc с помощью bash без открытия файла - PullRequest
1 голос
/ 01 октября 2019

Мне нужно изменить заголовок пары сотен файлов, добавив vdate из его заголовка в заголовок.

Если vdate = 19971222 , тогда мне нужно имя этогоnc файл становится rerun4_spindown_19971222.nc

Я знаю, что могу найти vdate по ncdump -h filename (см. пример заголовка ниже).

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, который может сделать это автоматически.

Я уверен, что должен быть более разумный способ извлечь vdate из заголовка nc, не могли бы вы, ребята, помочь мне?

Спасибо!

1 Ответ

2 голосов
/ 02 октября 2019

Теоретически, что-то подобное должно работать:

#! /bin/sh
for file in rerun4_*_spindown_* ; do

  vdate=$(ncdump -h $file | awk '$1 == ":vdate" { print $3 }')
  new_name="rerun4_spindown_$vdate.nc"
  mv "$file" "$new_name"
done

У меня нет доступа к файлам netCDF - требуется дополнительное тестирование.

...