Извлечение данных из нескольких файлов netcdf с использованием ncks для цикла for

Я пытаюсь извлечь определенные переменные из файлов netcdf. Следующий код работает, если я применяю его к одному файлу:

ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc

Смотрите также вопрос: Hyperlab 4D-переменной netcdf, используя ncks для объяснения. Теперь я хочу использовать этот код для нескольких файлов.nc со следующими именами:

20091208000001.nc
20091208000002.nc
20091208000003.nc

Я попробовал следующий цикл:

# !bin/bash
for ((x=1;x<=3;x+=1))
do
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 2009120800000$x.nc testU.nc
done

Я получаю ошибку

ncks: ERROR received 4 filenames; need no more than two

Как получить цикл для извлечения только из одного файла за один раз, а затем добавить извлеченный вывод из всех файлов в один выходной файл?

3 ответа

Решение

Я верю словам ni_u,234,235,1 ошиблись как другое имя файла. Вам нужен другой -d до этого.

И если вы обрабатываете несколько файлов nc, вы можете переименовать testU.nc чтобы они не перекрывались, или вы могли бы использовать ncrcat объединить в один файл. Например

ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc

@Packard прав в обоих случаях. Кроме того, шаг 1 по умолчанию и, следовательно, не требуется. следовательно

ncrcat -C -F -d nj_u,151,152 -d ni_u,234,235 -v vel_u 2009120800000${x}.nc testU${x}.nc

Я вижу пару ошибок в вашем скрипте, но ничего, что могло бы привести к вашей реальной ошибке.

  • Линия Шебанга не должна содержать пробела и путь должен быть абсолютным
  • В запятой for условие, которое должно быть точкой с запятой

    #!/bin/bash
    
    for ((x=1;x<=3;x+=1))
    do
        ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 2009120800000$x.nc testU.nc
    done
    

Когда я готовлюсь echo к команде, которую вы хотите запустить, я получаю такой результат:

ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000002.nc testU.nc
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000003.nc testU.nc

Три вызова с одним файлом каждый. Этот код работает. Похоже, есть что-то еще. Вы упрощаете свой код или показываете полный код?

Я отредактировал приведенный выше код в соответствии с желаемыми размерами (широта, долгота)

ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc

и обратная связь была такой:

ПОДСКАЗКА: Если операция завершилась неудачно, попробуйте измерение, обернутое в multislabbing (http://nco.sf.net/nco.html), используя сначала ncks, а затем примените ncrcat к полученному файлу

Другие вопросы по тегам