如何解决使用 CDO
这篇文章很长,因为我想更好地解释上下文。
我的主要数据源是 netCDF 格式,我想转换成 CSV 文件。
一段时间以来,我一直在使用 Python 进行转换。例如,我使用之前修改过的 netCDF 数据(m > mm,每小时 > 每天),然后转换为 CSV 文件。这是它的样子:
可以注意到:
- 第一行包含以逗号分隔的变量名称。第二行及以上的值也用逗号分隔。
- 纬度和经度值未四舍五入。
如上图所示是所需的数据展示。
之后,我决定使用气候数据运算符 (CDO),因为它更容易应用某些功能。在 WSL 上的 Ubuntu 中,我将 netCDF 文件转换为 CSV 文件。这些是我使用的代码:
cdo -outputtab,date,lat,lon,value era5land_total_precipitation_daily_feb-nov_2017_mm.nc > test-1_tp.csv
变量名所在的第一行前面加上了“#”,因为它不应该出现在那里。此外,值由空格分隔。
第二个代码
cdo -outputtab,lat:6,lon:6,value:8 era5land_total_precipitation_daily_feb-nov_2017_mm.nc | grep -v '#' | sed -e 's/ */,/g' >> test-1_tp.csv
第三个代码
cdo -outputtab,value:8 era5land_total_precipitation_daily_feb-nov_2017_mm.nc | sed 's/[[:space:]]/,/g' > test-1_tp.csv
用逗号分隔的值部分解决了问题,尽管在某些观察中,最后两个值仍然被空格分隔。此外,顶部没有变量名称。
第四个代码
cdo -outputtab,value:8 era5land_total_precipitation_daily_feb-nov_2017_mm.nc | awk 'FNR==1{ row=$2","$3","$4","$5; print row } FNR1=1{ row=$1","$2","$4; print row}' > test-1_tp.csv
输出包含
最后一个代码的结果与我想要获得的结果最接近,除了需要删除图像内容中的第二行并且纬度/经度值仍然四舍五入。有什么建议可以获得像图像 1 这样的数据集吗?
额外帮助:有人知道这些代码的含义吗?
...| grep -v '#' | sed -e 's/ */,/g'
...| sed 's/[[:space:]]/,/g'
...| awk 'FNR==1{ row=$2","$4; print row}'
非常感谢!
解决方法
我在另一个论坛问了同样的问题,我得到了以下解决方案:
cdo -outputtab,date,lat:6,lon:6,value:8 infile.nc | grep -v '#' | tr -s ' ' | sed -e 's/ /,/g;s/^.//;s/.$//' >> outfile.csv
记住
- 第一行包含变量的通用名称:v1、v2、v3 和 v4,而不是日期、纬度、经度和 tp。
- 所有值都以逗号分隔。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。