Dav*_*ley 2 variables subtraction netcdf nco cdo-climate
我有两个 netcdf 文件:rsds.nc名为rsns.nc. rsds.nc包含一个名为 rsds 的变量,并rsns.nc包含一个名为 rsns 的变量。现在,我想有上涌辐射rsus.nc通过内减去变量rsds.nc和rsns.nc分别。
我尝试了以下方法:
ncdiff rsds.nc rsns.nc rsus.nc
ncbo op_typ=diff rsds.nc rsns.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)
他们都产生了一个,rsus.nc但是这个文件中的变量 rsus 丢失了。知道为什么会这样吗?
两种替代 CDO 解决方案。
1. 大锤法
cdo 子命令可以在一行中完成此操作:
cdo sub rsds.nc rsns.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)
你会收到警告
cdo sub(警告):输入流具有不同的参数!
但你可以忽略这一点。请注意,您可能希望将变量名称更改为更合适的名称,因此您可以在一行中执行此操作,如下所示:
cdo setname,rsus -sub rsds.nc rsns.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)
2.expr方法
这只是模仿已接受的答案,但在 cdo 等效命令中
cdo cat rsds.nc rsns.nc tmp.nc
cdo expr,"rsus=rsds-rsns" temp.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)
顺便说一句,对于周四页面上的所有解决方案,您可能需要使用cdo chgattr或 nco 等效项来确保元数据对于您的新字段是正确的,特别是如果您打算长期保留文件或将它们传递给其他人。
作为@RichSignell 答案的替代方法,您可以将变量合并到一个文件中,并使用 ncap2 执行减法而不重命名变量。
ncks -A rsns.nc rsds.nc
ncap2 -s 'rsus=(rsds-rsns)' rsds.nc rsus.nc
Run Code Online (Sandbox Code Playgroud)