Извлечение данных из нескольких файлов 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 к полученному файлу