通过使 sed 步骤仅修改文件的开头并传递所有其他内容,shell 管道只能略微改进,但是您拥有的表达式处理起来非常便宜,并且不会减少花费的时间。
核心问题可能是您花费大量时间ncdump
将文件信息格式化为文本数据,并ncgen
再次将文本数据解析为 NetCDF 文件格式。
由于通过 dump+gen 的路径与显示的一样慢,因此使用 NetCDF 功能来转换数据文件。
如果幸运的话,可能会有一些工具直接对您的数据文件进行操作以进行更改或转换。如果没有,您可能必须自己使用 NetCDF 库编写它们。
如果您非常不走运,NetCDF-4 文件是带有一些额外元数据的 HDF5 文件。特别是,维度的长度以_netcdf_dim_info
组的形式存储在数据集中_netCDF
(或者文档告诉我)。
可以修改那里的信息以将time_counter
维度的当前长度转换为 UNLIMITED 的值(即数字 0),但如果这样做,您确实需要验证结果文件的完整性,因为文档巧妙地把它:
“请注意,使用 HDF5 修改这些文件几乎肯定会使它们对 netCDF-4 不可读。”
附带说明一下,如果此过程对您的团队很重要,那么可能值得研究哪些硬件可以更快地完成任务。在我的 Bulldozer 系统上,转换 78 MB 文件的过程需要 20 秒,使用大约 500 MB 内存用于 ncgen 工作集(1 GB 虚拟)和 12 MB 内存用于 ncdump 工作集(111 MB 虚拟),每个任务占用更好的核心部分。
任何像样的磁盘都应该在 10 秒左右读取/接收您的文件,只要您不交换内存,内存就无关紧要,因此如果您采用转储 + 生成路线,CPU 可能是您最关心的问题。
如果并发内存使用是一个大问题,您可以通过将 sed 的中间结果保存到磁盘来交换一些字节以换取空间,这可能需要 1.5 GB 左右。