我有以下代码,它从 netcdf 文件中提取数字,每个循环将它们放入另一个 netcdf 文件中。
mapfile Latitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt) #tr is transform from to -s is squeeze. So look in the text files for all the spaces and replace them by newline '/n'
mapfile Longitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLongitude.txt)
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
outputNumber="$(ls -lq *_??????.nc | wc -l)"
echo "the number of output netcdf fles is ${outputNumber}"
valueI=`cat I.txt`
valueJ=`cat J.txt`
arrI=($valueI)
arrJ=($valueJ)
for ((i=1; i<=outputNumber; i++))
do
echo "geknoei$i.nc"
ncrcat -C -F -d nj_u,${arrJ[i]},${arrJ[i+1]} -d ni_u,${arrI[i]},${arrI[i+1]} -v vel_u *_??????.nc gekneoi$i.nc
done
由于空间问题,我不得不压缩输入文件,并且此代码不再有效。我想知道是否可以编写一个代码,在循环中解压缩一个文件(一次一个)提取我需要的内容,然后在循环结束时重新压缩它。
因此,大致如下:
mapfile Latitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt) #tr is transform from to -s is search. So look in the text files for all the spaces and replace them by newline '/n'
mapfile Longitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLongitude.txt)
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
outputNumber="$(ls -lq *_??????.nc | wc -l)"
echo "the number of output netcdf fles is ${outputNumber}"
valueI=`cat I.txt`
valueJ=`cat J.txt`
arrI=($valueI)
arrJ=($valueJ)
for ((i=1; i<=outputNumber; i++))
do
echo "geknoei$i.nc"
gunzip *_??????.nc.gz
ncrcat -C -F -d nj_u,${arrJ[i]},${arrJ[i+1]} -d ni_u,${arrI[i]},${arrI[i+1]} -v vel_u *_??????.nc gekneoi$i.nc
gzip *_??????.nc
done
问题是这会一次性解压缩所有文件,这会占用大量空间。如果我一次解压缩一个文件,我的 ncrcat 代码将不再工作,因为它从所有可用的 -unzipped- .nc 文件中提取。
如何一次解压缩一个 .nc 文件,同时仍使线路正常ncrcat -C -F -d nj_u,${arrJ[i]},${arrJ[i+1]} -d ni_u,${arrI[i]},${arrI[i+1]} -v vel_u *_??????.nc gekneoi$i.nc
工作?