我是 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"