vel_u 변수가 포함된 netcdf 파일이 여러 개 있고 그 파일에서 특정 값을 추출하고 싶습니다. 나는 이 값들의 지수를 결정했습니다. I.txt 및 J.txt에 저장됩니다. 아래 코드에서 볼 수 있듯이 함수를 사용하여 연결합니다.
ncrcat -C -F -d dimension1,from,to -d dimension2,from,to -v variable files_to_extract_from.nc file_to_write_to.nc
아래 코드를 실행하면 루프가 실행될 때마다 동일한 오류가 발생합니다.
ncrcat: ERROR parsing hyperslab specification for dimension nj_u,,
Must specify minimum and/or maximum value since stride is also empty
ncrcat: HINT Conform request to hyperslab documentation at http://nco.sf.net/nco.html#hyp
${arrJ[i]},${arrJ[i+1]}
이로 인해 내 코드의 "from, to" 부분이 제대로 작동하지 않는 것 같습니다 . 따라서 인덱스에 대해 알지 못합니다. 내 색인은 I.txt 및 J.txt에 저장됩니다. 예를 들어 181, 195, ... 그리고 다음 인덱스를 사용하여 파일에서 추출하려는 각 루프입니다. 그래서 반복 1
nj_u,181,182
반복 2
nj_u,195,196
등. 이것은 내 코드입니다.
#!/bin/bash
outputNumber="$(ls -1q *_??????.nc | wc -l)" # what is the number of files in this directory
echo "the number of output netcdf files is ${outputNumber}"
valueI= `cat I.txt`
valueJ= `cat J.txt`
for ((i=1; i<=outputNumber; i++))
do
arrI=($valueI)
arrJ=($valueJ)
ncrcat -C -F -d nj_u,${arrJ[i]},${arrJ[i+1]} -d ni_u,${arrI[i]},${arrI[i+1]} -v vel_u *_??????.nc NewFile.nc
#every loop I should extract four numbers from every file
done
또 다른 문제는 이 코드를 사용하면 모든 루프에서 NewFile.nc를 덮어쓰는 것처럼 보인다는 것입니다.
두 가지 질문이 있습니다.
- 올바른 인덱스로 읽는지 어떻게 확인합니까?
- 이전 파일을 덮어쓰지 않고 각 루프에서 추출된 값을 동일한 .nc 파일에 어떻게 저장할 수 있나요?
답변1
나는 추측 I.txt
하고 값을 J.txt
포함할 것인가 outputNumber
? arrI
색인으로 시작한 다음 0
필요합니다.
for ((i=0; i<outputNumber; i++))
그렇지 않으면 오류 메시지에 표시된 대로 인덱스가 너무 높아 매개변수가 누락되게 됩니다.
그런데 왜 arrI=($valueI)
모든 루프에 할당합니까? 루프 전에 한 번만 수행할 수 있습니다.