具有相同名称grid_200001.grb2.nc
的多个文件,只有一个组件发生变化,即grid_200010.grb2.nc
个月。我想将它们全部同时用作输入文件
我希望实现的一个例子是
fname="grid_"
year="2010"
month="01 02 03 04 05 06 07 08 09 10"
ext="grb2"
end="nc"
for((y=$year;y<=$year;y++));
do
for m in $month
do
ifile=$fname$y$m.$ext.$end
>>merge $ifile $ifile ... ofile
我希望拥有的所需命令的例子是
>> merge grid_200001.grb2.nc grid_200002.grb2.nc ....grid_200012.grb2.nc ofile
我希望所有可用的文件同时作为输入文件输入
答案 0 :(得分:1)
fname="grid_"
years=({2000..2010})
months=(01 02 03 04 05 06 07 08 09 10) ## ({01..10}) should be the same
ext="grb2"
end="nc"
shopt -s extglob
IFS='|' eval 'pattern="${fname}@(${years[*]})@(${months[*]}).${ext}.${end}"'
echo "pattern = ${pattern}" ## for curiosity.
files=($pattern) ## pathname expansion is sorted in Bash.
merge "${files[@]}" ofile
答案 1 :(得分:0)
你可以试试这个:
cat grid_2010[01][0-9].grb2.nc >> ofile
答案 2 :(得分:0)
我不确定我是否完全理解了这个问题(感谢您的评论编辑)
filenames=""
for year in $(seq 2000 2010)
do
for month in $(seq -w 0 10)
do
filename="grid_"$year$month".grb2.nc"
filenames=$filenames" "$filename
done
done
your_command $filenames
这可能是你需要的? 猫和通配符很不错但会保持相同的顺序吗?
再次编辑:
但是,如果你只需要按升序排序,那么通配符的选择会更加简单your_command grid_20[01][0-9][01][0-9].grb2.nc
(对于通配符总是这样吗?)