我在同一路徑中有 5 個目錄my_path/:
my_path/1951
my_path/1952
my_path/1953
my_path/1954
my_path/1955
每個目錄包含不同數量的以 . 結尾的 netcdf 檔案.nc。
我需要CDO通過在每個目錄和檔案中回圈來執行命令。以下命令僅適用于第一個目錄和檔案my_path/1951/*.nc:
for i in my_path/1951/*.nc
do
cdo selyear,1951/1970 "$i" "$i"2
done
該命令從目錄中的 nc 檔案中選擇年份,從目錄的年份開始,到 20 年后結束。
所以對于第二個目錄,它將是:
for i in my_path/1952/*.nc
do
cdo selyear,1952/1971 "$i" "$i"2
done
第三個:
for i in my_path/1953/*.nc
do
cdo selyear,1953/1972 "$i" "$i"2
done
等等...
有沒有一種方法可以使用唯一的 for 回圈或嵌套的 for 回圈來完成所有操作,而不是為每個目錄重復上面的 for 回圈?
uj5u.com熱心網友回復:
請您嘗試以下方法:
#!/bin/bash
for i in my_path/*/; do
year=${i%/}; year=${year##*/} # extract year
year2=$(( year 19 )) # add 19
for j in "$i"*.nc; do
echo cdo "selyear,${year}/${year2}" "$j" "$j"2
done
done
它將命令列輸出為空運行。如果它看起來不錯,請放下echo并運行。
uj5u.com熱心網友回復:
你可以這樣回圈:
shopt -s nullglob
for i in my_path/195[1-5]/*.nc
do
...
done
shopt即使某些目錄不包含 nc 檔案,該命令也可確保回圈正常作業。
uj5u.com熱心網友回復:
for x in $@
for i in my_path/$x/*.nc
...
您可以通過獲取 sh 腳本的引數來執行 On2。
yourScript.sh 1951 1952 ...
之后,您可以將所有檔案夾傳遞給您的腳本。
yourScript.sh ./*
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441515.html
