执行嵌套循环+ foreach + csh

时间:2012-04-13 22:27:37

标签: loops for-loop foreach nested

自从我使用csh格式化已经有一段时间了,我在使用一些东西时遇到了一些麻烦。事情似乎在Matlab中更容易执行,但是我需要在终端上执行此操作,因为我正在尝试与之交互的程序。

所以这就是我想要做的:我有一个像这样结构的文件del.txt

1

2

3

4

等。所以每个值都在它自己的行中,并且所有数据都有一列。我有一堆其他文件在我的目录中。我希望将值1(在本例中为1)与文件1匹配,将值2与文件2等匹配,依此类推。所以这就是我做的......

代码:

!/ bin中/ CSH

foreach a(cat del.txt

foreach sta(ls *.HHZ

echo a is $a

echo $sta


cat <<END>>macro.m

r $ a

r $ sta

END

sac macro.m

rm macro.m

然而,我实现的是它遍历del.txt和每个文件中的所有值,然后继续到我的目录中的下一个文件并循环遍历所有值。我无法确定应该匹配正确值的格式。我在剧本中做的不多,直到我能让他们匹配。请帮助有人可以告诉我我做错了什么吗?我读到foreach命令将执行每个文件上的所有命令..但是还没有找到解决方法。我想要它做的是从del.txt获取值1并将其与文件1(sta)从目录完成循环匹配,然后从del.txt获取值2并将其与目录中的文件2匹配( STA)。我从来没有做过只是在一个文件子集上使用csh的简单迭代,我不知道如何将值引用到另一个。任何帮助将不胜感激。我没有找到一个简单的方法来做到这一点,而不是写出一切。我查看了'for'和'while'命令..如果有一种简单的方法可以做到这一点,我没有看到它。

干杯, ķ

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你有一个txt文件将列出字符串,你希望它与文件匹配。

我假设你的这个特别声明:

  

我希望将值1(在本例中为1)与文件1匹配

您的意思是将1处的字符串与文件1的文件名匹配。

这是一个基于这个假设的可能解决方案(这无论如何都会对循环有帮助):

#Store value in file.txt in a array
set file_var = `cat file.txt`
#Store file list in my_dir in a var
set my_dir = <your dir path>
set file_list_var = `ls $my_dir`

#Let's print "file Match: for every match
foreach var1 ($file_var)
     foreach var2 ($file_list_var)
          if("$var1" == "$var2") echo $var1 = $var2 : Match Found.
     endif
endif