我有一个 Netcdf 文件文件夹。这些文件是一个月的六个小时风文件。我想合并所有文件。我不知道如何制作一个 shell 脚本来按小时顺序读取文件以合并它们。请帮忙。
anal_00z20230118.nc
anal_00z20230119.nc
anal_00z20230120.nc
anal_00z20230121.nc
anal_00z20230122.nc
anal_00z20230123.nc
anal_00z20230124.nc
anal_00z20230125.nc
anal_00z20230126.nc
anal_00z20230127.nc
anal_00z20230128.nc
anal_00z20230129.nc
anal_00z20230130.nc
anal_00z20230131.nc
anal_06z20230118.nc
anal_06z20230119.nc
anal_06z20230120.nc
anal_06z20230121.nc
anal_06z20230122.nc
anal_06z20230123.nc
anal_06z20230124.nc
anal_06z20230125.nc
anal_06z20230126.nc
anal_06z20230127.nc
anal_06z20230128.nc
anal_06z20230129.nc
anal_06z20230130.nc
anal_12z20230118.nc
anal_12z20230119.nc
anal_12z20230120.nc
anal_12z20230121.nc
anal_12z20230122.nc
anal_12z20230123.nc
anal_12z20230124.nc
anal_12z20230125.nc
anal_12z20230126.nc
anal_12z20230127.nc
anal_12z20230128.nc
anal_12z20230129.nc
anal_12z20230130.nc
anal_18z20230118.nc
anal_18z20230119.nc
anal_18z20230120.nc
anal_18z20230121.nc
anal_18z20230122.nc
anal_18z20230123.nc
anal_18z20230124.nc
anal_18z20230125.nc
anal_18z20230126.nc
anal_18z20230127.nc
anal_18z20230128.nc
anal_18z20230129.nc
anal_18z20230130.nc
使用 GNU awk 和 zsh:
anal_20230130.nc.combined
将为每组文件写一个anal_XXz20230130.nc
。在 中
bash
,等效的 glob 模式将是./*_@(00|06|12|18)z[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789].nc
您需要的shopt -s extglob failglob
。在 和
bash
中zsh
,globs 按词法顺序扩展,因此文件将在文件本身之前*_00z*
出现在文件本身之前。*_06z*
*_12z*
*_18z*
如果文件数量非常多,您可能会遇到
execve()
参数大小 + 环境的限制,并出现“参数列表太长”错误。这可以通过将列表传递给 zsh 的内置函数(因此不涉及 execve() )来避免,
print -rNC1
以 NUL 分隔打印它以传递给gawk
:bash
没有print -rNC1
,但你可以用一个函数来模拟它:并使用
nullglob
而不是failglob
获得等效的zsh
glob限定符N
。请注意,如果这些 6 小时的文件在一行的中间拆分(例如,如果以不后跟换行符
anal_00z20230130.nc
结尾并以 开头,则合并后的文件将有而不是,因为将在它读取的每条记录后添加一个,即使是非-delimited ones. 如果这不是你想要的或者如果这些文件不是文本文件,你可以将.unix.sta
anal_06z20230130.nc
ckexchange.com
unix.sta<newline>ckexchange.com
unix.stackexchange.com
gawk
ORS
print
printf "%s", $0 RT