쉘 스크립트를 사용하여 hdf5 파일 목록을 동일한 이름의 netcdf 파일로 변환

쉘 스크립트를 사용하여 hdf5 파일 목록을 동일한 이름의 netcdf 파일로 변환

다음과 같이 월별 폴더별로 정렬된 위성 데이터가 포함된 데이터세트 목록이 있습니다.

01  02  03  04  05  06  07  08  09  10  11  12

이러한 폴더는 일별 데이터 폴더로 더 나누어집니다. 예를 들어 첫 번째 달의 경우 01일별 파일은 다음과 같이 폴더에 정렬됩니다.

01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31

마지막으로 데이터 세트가 있습니다.

OMI-Aura_L2-PROFOZ_2016m0101t0059-o60970_v003-2016m0107t153711.he5.met  OMI-Aura_L2-PROFOZ_2016m0101t1410-o60978_v003-2016m0107t153715.he5
OMI-Aura_L2-PROFOZ_2016m0101t0237-o60971_v003-2016m0107t153714.he5      OMI-Aura_L2-PROFOZ_2016m0101t1410-o60978_v003-2016m0107t153715.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0237-o60971_v003-2016m0107t153714.he5.met  OMI-Aura_L2-PROFOZ_2016m0101t1549-o60979_v003-2016m0107t153713.he5
OMI-Aura_L2-PROFOZ_2016m0101t0416-o60972_v003-2016m0107t153715.he5      OMI-Aura_L2-PROFOZ_2016m0101t1549-o60979_v003-2016m0107t153713.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0416-o60972_v003-2016m0107t153715.he5.met  OMI-Aura_L2-PROFOZ_2016m0101t1727-o60980_v003-2016m0107t153718.he5
OMI-Aura_L2-PROFOZ_2016m0101t0555-o60973_v003-2016m0107t153709.he5      OMI-Aura_L2-PROFOZ_2016m0101t1727-o60980_v003-2016m0107t153718.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0555-o60973_v003-2016m0107t153709.he5.met  OMI-Aura_L2-PROFOZ_2016m0101t1906-o60981_v003-2016m0107t153716.he5
OMI-Aura_L2-PROFOZ_2016m0101t0734-o60974_v003-2016m0107t153717.he5      OMI-Aura_L2-PROFOZ_2016m0101t1906-o60981_v003-2016m0107t153716.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0734-o60974_v003-2016m0107t153717.he5.met  OMI-Aura_L2-PROFOZ_2016m0101t2045-o60982_v003-2016m0107t153719.he5
OMI-Aura_L2-PROFOZ_2016m0101t0913-o60975_v003-2016m0107t153711.he5      OMI-Aura_L2-PROFOZ_2016m0101t2045-o60982_v003-2016m0107t153719.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0913-o60975_v003-2016m0107t153711.he5.met  OMI-Aura_L2-PROFOZ_2016m0101t2224-o60983_v003-2016m0107t153717.he5

.he5확장명이 있는 파일을 추출하고 파일 이름을 유지하는 다음 코드를 사용하여 netcdf 파일로 변환하고 싶습니다 .

ncks inputfile.he5 inputfile.nc

각 파일을 처리하려고 해서 이렇게 쉘 스크립트를 작성했습니다.

shopt -s globstar
   for f in ./**; do
       echo "$f" |grep -v .met | grep ".he5"
       echo "$f" |grep -v .met |ncks $(grep".he5") $(echo $(grep  -o 'OMI-Aura_L2-PROFOZ_[0-9]\{4\}m[0-9]\{4\}t[0-9]\{4\}-o[0-9]\{5\}_v003-[0-9]\{4\}m[0-9]\{4\}t[0-9]\{6\}').nc)
   done
         

                                                                                                                                                                                           

파일 이름을 추출할 수 있지만 출력을 얻을 수 없습니다. 최종적으로 모든 파일을 어떻게 변환할 수 있나요?

답변1

명령이 너무 복잡하여 유사한 명령이 필요하지 않습니다 grep.

shopt -s globstar
for f in ./**/*.he5; do
    ncks "$f" "${f%.*}.nc"
done
  • ${f%.*}마지막 문자부터 시작하는 모든 문자를 제거합니다..

답변2

findfind 및 해당 옵션을 사용하면 execdirfind가 디렉터리를 파일이 발견된 디렉터리로 변경한 다음 파일의 상위 디렉터리에서 다음과 같이 명령을 실행할 수 있습니다.

find /path/to/source/directory -type f -name '*.he5' -execdir sh -c '
    for file; do
        ncks "${file}" ${file%.he5}.nc"
    done
' sh_ncks {} +

구문 은 다음 ${parameter%word}과 같습니다매개변수 확장, 인수에서 가장 짧은 접미사를 제거합니다.

관련 정보