我是 UNIX 新手,我想应用 CDO(气候数据操作员)“remapbil”命令来转换网格(从投影到地理坐标系)。使用以下命令对于 1 个单个文件来说效果非常好:
cdo remapbil,target.grd hurs_EUR-11_ICHEC-EC-EARTH_rcp26_r3i1p1_DMI-HIRHAM5_v1_day_20360101-20401231.nc hurs_36_40_bil.nc
但我必须对很多不同的文件执行此操作。出于这个原因,我尝试编写以下 bash shell,它允许我对目录中的所有文件运行 remapbil 命令:
#!/bin/bash
for i in *.nc;
do
echo $i
for file in "ls *.nc"; do
cdo remapbil,target.grd tas_EUR-11_ICHEC-EC-EARTH_rcp45_r3i1p1_DMI-HIRHAM5_v1_day_20210101-20251231.nc > tas_$i_bil.nc
done
done
但我总是收到以下错误:
cdo remapbil (Abort): Too few streams specified! Operator needs 1 input and 1 output streams.
也许有人可以帮助我,那就太好了
答案1
将for file in "ls *.nc"; do . . . ; done
使用文字参数运行该命令一次ls *.nc
- 您可以按如下方式确认:
$ ls *.nc
bar.nc foo.nc
$ for file in "ls *.nc"; do echo "$file" ; done
ls *.nc
您大概打算命令替换使用反引号代替双引号但这是个坏主意1并且是不必要的,因为您已经使用(如果引用则安全)shell glob 循环文件。所以:
for i in *.nc;
do
echo $i
cdo remapbil,target.grd "$i" > "tas_${i}_bil.nc"
done
如果要删除并替换输出文件中的扩展名,可以更改"tas_${i}_bil.nc"
为"tas_${i%.nc}_bil.nc"