两个for循环Linux,带有两个输入文件

时间:2018-04-07 04:45:28

标签: linux for-loop

我在一个输入中有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

我希望在循环中运行此模式

2 个答案:

答案 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