bash - 如何使用 ncatted 添加或编辑大量全局属性?
问题描述
是否有使用ncatted编辑和/或添加大量全局属性的便捷方法?也许通过将每个att_dsc指定到外部文件并将其作为参数传递?
编辑:我不工作的解决方案是:ncatted -h $(cat global_attributes | xargs -d '\n') file.in file.out
而在global_attributes
我有一个att_dsc列表如下:
-a institution,global,m,c,"Super Cool University"
-a source,global,c,c,"My Awesome Radar"
-a contributors,global,c,c,"Enrico Fermi, Galileo Galilei, Leonardo Da Vinci"
这里的问题似乎是包含多个单词的字符串的引号!
解决方案
ncatted
支持两种互补的大规模属性修改方法:正则表达式和多选项。适合正则表达式的所有变量都可以同时修改其属性,并且-a aed_sct
每次调用可以多次使用该选项:
ncatted -a units,temperature.?,o,c,kelvin -a foo,bar,o,c,davegrohl in.nc out.nc
这都记录在这里。
编辑:刚刚注意到 OP 想要全局属性。有一个 NCO 范围的选项 --glb_att_add 在这里可能做得很好,因为这些选项可以用冒号分隔。记录在这里。
ncks --glb machine=${HOSTNAME}:created_by=${USER}:... in.nc out.nc
编辑 20210907:刚刚注意到您巧妙地使用了xargs
. 你离解决这个问题太近了!尝试在输入文件中的每个双引号前加上反斜杠,例如,\"foo bar\"
这应该保持引号完整,以便 shell 正确传递参数。
编辑 20210910:正如下面的评论中提到的,直接在命令行上直接替换 xargs 的结果是行不通的(为什么?)。但是,一个简单的解决方法是使用xargs
构造命令字符串,并使用 执行该字符串eval
,如下所示:
cat > opt.txt << EOF
-a institution,global,o,c,\'Super Cool University\'
-a source,global,o,c,\'My Awesome Radar\'
-a contributors,global,o,c,\'Enrico Fermi, Galileo Galilei, Leonardo Da Vinci\'
EOF
opt=$(cat opt.txt | xargs)
cmd="ncatted -O ${opt} in.nc out.nc"
eval $cmd
请注意使用反斜杠来保护选项文件中的引号不受 shell 影响。此外,GNU 的xargs
行为与 MacOS 不同,因此应小心为其制定任何参数。尽管如此,上述程序对我有用。
推荐阅读
- python - 在数据框中,从起始元素中查找小于/大于 0.05 的元素。然后将这个新索引作为第一个迭代器
- elasticsearch - ElasticSearch 查询错误:查询格式错误,没有 start_object
- arrays - 查找唯一 ID,将行复制并粘贴到新选项卡,如果 ID 重复,则将某些行合并在一起
- javascript - 无法读取 null 的属性“帖子”
- django - 多个 Django 子表单在主表单中使用 ajax 显示,但提交子表单时未注册数据(无错误)
- python - 如何计算子目录?
- c - LONG_MAX -1 在 64 位机器上?
- java - 如何在 talend 的文件夹中查找 .TXT 文件并使用 tftpget?人才
- macos - 在 macos big Sur 11.2.3 中找不到 imageio
- c# - ASP.NET Core:以编程方式为本地化视图设置资源文件