我在一个输入中有20个文件,在另一个输入中有20个文件。我希望执行我的命令,它将同时从每个输入中获取两个文件并执行命令,即对于一个输入中的每个文件,它将从第二个输入获取相应的文件。这是我的尝试:
asscalar
我正在编写我希望在此循环中工作的一行代码。代码的语法是
for f1 in zero-mam-2050-2074*.nc
do
for f2 in avm-mam-1976-2000-tasmax-*.nc
do
cdo ydayadd "$f1" "$f2" ydayadd-$file
done
done
此代码一次只能使用一个命令运行。
cdo ydayadd input_1 input_2 output
我希望在循环中运行此模式
答案 0 :(得分:1)
现在有一个非常不同的问题!我首先监督的是,日期与零和avm文件不匹配。
您不需要2个循环,但需要映射。 ${f1/zero-mam-2050-2074-/}
提取类似-BNU.nc
的内容,需要附加到 tasmax 文件和 ydayadd 文件。
对于测试,如果您向我们提供了所有必要的信息,则上述代码应该有效。要真正执行该工作,请将echo
替换为cdo
:
for f1 in zero-mam-2050-2074-*.nc
do
ext=${f1/zero-mam-2050-2074-/}
f2=avm-mam-1976-2000-tasmax-${ext}
cdo ydayadd "$f1" "$f2" ydayadd-$ext
done
(还有一个错误,我使用的是ext=${f/zer
而不是ext=${f1/zer
。)
测试:
ls -1
avm-mam-1976-2000-tasmax-ACCESS.nc
avm-mam-1976-2000-tasmax-bcc.nc
avm-mam-1976-2000-tasmax-BNU.nc
zero-mam-2050-2074-ACCESS.nc
zero-mam-2050-2074-bcc.nc
zero-mam-2050-2074-BNU.nc
alias cdo=echo
for f1 in zero-mam-2050-2074-*.nc
> do
> ext=${f1/zero-mam-2050-2074-/}
> f2=avm-mam-1976-2000-tasmax-${ext}
> cdo ydayadd "$f1" "$f2" ydayadd-$ext
> done
ydayadd zero-mam-2050-2074-ACCESS.nc avm-mam-1976-2000-tasmax-ACCESS.nc ydayadd-ACCESS.nc
ydayadd zero-mam-2050-2074-BNU.nc avm-mam-1976-2000-tasmax-BNU.nc ydayadd-BNU.nc
ydayadd zero-mam-2050-2074-bcc.nc avm-mam-1976-2000-tasmax-bcc.nc ydayadd-bcc.nc
答案 1 :(得分:0)
我认为以下脚本将向您展示获得所需内容的一种方法。这个脚本回显了匹配的文件名' up - 将命令改为你真正想要的任何东西。
注意:此脚本假定您希望文件名"配对"基于与通配符@relative_posts = Post.of_category(@post.category)
字符匹配的子字符串。
它使用一些bash变量替换来剥离第一个文件列表中的文件名部分,这些文件列表与匹配"*"
通配符的名称部分不匹配(留下{{1带有与"*"
匹配的子字符串的变量。然后使用它来构造对中的第二个文件名。这可能是更好的方法,但我不是shell或bash专家。
希望如果这不能满足您的需求,它会给您一些想法:
$wildcard