0

自从我使用 csh 格式以来已经有一段时间了,我在一些事情上遇到了一些麻烦。在 Matlab 中执行起来似乎要容易得多,但是由于我试图与之交互的程序,我需要在终端上执行此操作。

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

1

2

3

4

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

代码:

!/bin/csh

为一个 ( cat del.txt)

foreach sta( ls *.HHZ)

echo a is $a

echo $sta


cat <<END>>macro.m

r$a

r$sta

结尾

sac macro.m

rm macro.m

结尾

结尾

然而,我实现的是它遍历 del.txt 和每个文件中的所有值,然后移动到我目录中的下一个文件并遍历所有值。我无法弄清楚这应该采用的格式以匹配正确的值。在我可以让它们匹配之前,我在脚本中没有做太多事情。请帮助有人可以告诉我我做错了什么吗?我读到 foreach 命令将执行每个文件上的所有命令..但无法找到解决此问题的方法。我想要它做的是从 del.txt 中获取值 1 并将其与目录中的文件 1(sta)匹配完成循环,然后从 del.txt 中获取值 2 并将其与目录中的文件 2 匹配(站)。我从来没有做的不仅仅是在一个文件子集上使用 csh 进行简单的迭代,而且我不确定如何将这些值相互引用。任何帮助将不胜感激。我还没有找到一种简单的方法来做到这一点而不把所有的东西都写出来。我查看了“for”和“while”命令..如果有一种简单的方法可以做到这一点,我没有看到它。

干杯,K

4

1 回答 1

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
于 2012-04-15T13:01:48.337 回答