Извлечение данных из нескольких файлов netcdf с использованием ncks для цикла for - PullRequest
0 голосов
/ 07 февраля 2019

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

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

См. Также вопрос: Гиперслот переменной 4c 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 ]

0 голосов
/ 07 февраля 2019

Я считаю, что слова 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
0 голосов
/ 07 февраля 2019

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

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

0 голосов
/ 07 февраля 2019

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

  • Строка shebang не должна содержать пробела, а путь должен быть абсолютным
  • В условии 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

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

...