postvar转nc批处理脚本

65 阅读1分钟

postvar2nc.sh

#!/usr/bin/bash

# 若参数个数不对,则给出用法提示
if [ $# -ne 1 ]; then
    echo "usage: $0 <ctl文件>"
    echo "example: $0 post.ctl"

    exit 1
fi

ctl_file=$1
echo "ctl file: $ctl_file"

# 遍历当前目录
for file in ./postvar*; do
    # 取文件名,示例:file=./postvar001,而filename=postvar001
    filename=$(basename $file)

    ###########################################
    # 若不是postvar000这种格式,则跳过
    if [[ ! $filename =~ ^postvar[0-9]{3}$ ]]; then
        continue
    fi

    ###########################################

    echo "processing: $filename"

    ###########################################
    # 修改ctl_file
    # 修改 dset
    sed -i "/^[[:space:]]*dset/s/.*/dset ^$filename/" $ctl_file
    # 修改 tdef,把时间维度改为1,第一个组\(tdef \s*\),第二组\(.*\),后面引用第一组\1,引用第二组\2
    sed -i "s/\(tdef\s*\)[0-9]\+\(.*\)/\11\2/" $ctl_file

    ###########################################
    # cdo 转换
    cdo -b F32 -f nc import_binary $ctl_file ${filename}.nc

done