- ubuntu中编写shell脚本文件
第一步:用vim创建一个以.sh结尾的文件,此时这个文件是暂时性的文件,当编写好文件并保存时才能看到文件;
第二步:要首先按一下“i”键才能进行插入(编写)模式,文件开头要写一段特殊符号,“#!/bin/bash” ,这个是开头文件的要求;
第三步:可以开始写里面的内容了,其中可以使用 # 作为单行注释的符号,用 “:<<! !”,作为多行注释的符号;
第四步:编写完语句之后按一下esc键,然后再按冒号键进入最后一行,然后在按“wq”键进行保存,在运行前要使用 “chmod”进行修改权限,具体的指令为“chmod 777 a.sh”;
最后一步:进行运行,使用" ./ "+文件名来运行这个脚本文件。
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
2.bash+cdo批量处理
#tree 命令查看文件夹下的所有文件
如果没有tree,需要重新打开ubuntu终端通过# sudo apt-get install tree 安装tree
A.输出文件的路径(以当前路径./为起始路径)到filelist.txt
find ./ | xargs ls -d >filelist.txt
B. 由于filelist.txt此时包含单独的目录,这里仅保留末尾为nc文件的行,去掉另外那些行:
sed -i ‘/nc/!d’ filelist.txt
#当一个文件夹中有多个变量,但只需要对某一个变量进行数据操作时,需要借助.sh脚本。如
我的文件夹下面有多个变量,其中每个变量都需要进行合并时,编辑的.sh脚本如下所示:
#!/bin/bash
varname=(clt od550aer rsds sfcWind tas)
for var in "${varname[@]}"; do
mergetime "${var}"*.nc "${var}"_historical.nc
done
#当对数据重采样以后又想合并数据又想提取区域时:
#!/bin/bash
# Define the variable names and experiments
varnames=("clt" "od550aer" "rsds" "sfcWind" "tas")
experiments=("historical" "ssp126" "ssp245" "ssp585")
# Create the output directory
mkdir -p post
# Loop over the variables and experiments
for varname in "${varnames[@]}"; do
for experiment in "${experiments[@]}"; do
# Merge the files for the current variable and experiment
cdo mergetime "${varname}"*"${experiment}"*.nc "post/${varname}.${experiment}.nc"
done
done
#!/bin/bash
# Define input and output directories
indir="input"
outdir="output"
# Define input and output region
region="-180,180,-90,90"
outregion="-100,20,0,60"
# Loop through input files and extract region
for infile in ${indir}/*.nc; do
outfile="${outdir}/$(basename ${infile})"
cdo sellonlatbox,${region} ${infile} ${outfile}
done
# Merge all output files
cdo mergetime ${outdir}/*.nc ${outdir}/merged.nc
# Re-grid merged file to output region
cdo remapbil,${outregion} ${outdir}/merged.nc ${outdir}/merged_regrid.nc