Linux双循环处理两组各20个NC文件的CDO命令问题
解决NC文件一一对应执行CDO命令的问题
我来帮你修正这个循环逻辑~你原来的嵌套for循环会把第一个目录里的每个文件和第二个目录的所有文件都配对执行一遍,这显然不是你想要的「对应文件操作」的效果对吧?
要实现两组文件一一对应(第1个配第1个,第2个配第2个...),我们可以用数组来存储两组文件列表,然后通过索引循环来配对:
单行版命令
files1=(zero-mam-2050-2074*.nc); files2=(avm-mam-1976-2000-tasmax-*.nc); for i in "${!files1[@]}"; do cdo ydayadd "${files1[$i]}" "${files2[$i]}" "ydayadd-${files1[$i]}"; done
逻辑说明
- 首先把两组NC文件分别存入
files1和files2两个数组,bash会自动按文件名排序(确保对应顺序正确,如果你需要特定顺序可以调整通配符或者手动排序) - 通过
${!files1[@]}获取数组的索引列表,循环时用${files1[$i]}和${files2[$i]}取出对应位置的文件 - 输出文件名用
ydayadd-${files1[$i]},这样能和原文件名对应,方便后续识别
注意:这个方法的前提是两组文件的数量一致(你说的各20个),并且文件名排序后是一一对应的状态。如果文件名顺序不对,你可能需要先手动调整文件命名或者给数组做排序处理。
内容的提问来源于stack exchange,提问作者Jahangir Ali
相关产品推荐
相关产品推荐

