【问题标题】:how can I add or edit lot of global attributes with ncatted?如何使用 ncatted 添加或编辑大量全局属性?
【发布时间】:2021-09-03 10:50:21
【问题描述】:

有没有使用 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"

这里的问题似乎是包含多个单词的字符串的引号!

【问题讨论】:

    标签: bash netcdf nco


    【解决方案1】:

    ncatted 支持两种互补的大规模属性修改方法:正则表达式和多选项。所有符合正则表达式的变量都可以同时修改其属性,并且每次调用可以多次使用-a aed_sct 选项:

    ncatted -a units,temperature.?,o,c,kelvin -a foo,bar,o,c,davegrohl in.nc out.nc
    

    所有这些都记录在案here

    编辑:刚刚注意到 OP 想要全局属性。有一个 NCO 范围的选项 --glb_att_add 在这里可能做得很好,因为这些选项可以用冒号分隔。记录在here

    ncks --glb machine=${HOSTNAME}:created_by=${USER}:... in.nc out.nc
    

    编辑 20210907:刚刚注意到您通过巧妙地使用 xargs 更新了您的问题。你离解决这个问题太近了!尝试在输入文件中的每个双引号前加上反斜杠,例如 \"foo bar\" 这应该保持引号完整,以便 shell 正确传递参数。

    编辑 20210910:如下面的 cmets 所述,直接在命令行上直接替换 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 不同,因此应小心为其制定任何参数。尽管如此,上述过程对我有用。

    【讨论】:

    • 谢谢查理!我确实想知道是否有一种更聪明的方法可以多次调用-a aed_sct 而无需将每个参数都写入命令行;也许通过将条目指定到文件中?另外,OP是什么意思?谢谢
    • OP 的意思是“原帖”。您可以将条目存储在一个文件中,然后使用 Awk 或 Perl 或 Python 来读取您的文件并组装并提交正确的 ncatted 命令。
    • 非常感谢你,查理!我已接受答案;但是,我也认为反斜杠可以解决它,但他们没有。 xargs 的行为方式中一定有一些隐藏的东西,因为如果我只是将这些命令复制/粘贴到 ncatted 命令中就可以了;如果我改为使用 xargs 解析它们,我会得到“错误收到 3 个文件名;不需要超过两个”。
    • 是的,我也注意到了。不过,这似乎是 shell 的一个特征,而不是 xargs 的古怪行为。我仍然有兴趣解决这个问题,因为它会对其他用户有所帮助。
    • 对不起,查理,回复晚了。我刚回到这个。它就像一个魅力!干杯 SG
    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 2020-04-30
    • 2010-11-10
    • 1970-01-01
    • 2012-04-20
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多