自从我使用csh格式化已经有一段时间了,我在使用一些东西时遇到了一些麻烦。事情似乎在Matlab中更容易执行,但是我需要在终端上执行此操作,因为我正在尝试与之交互的程序。
所以这就是我想要做的:我有一个像这样结构的文件del.txt
1
2
3
4
等。所以每个值都在它自己的行中,并且所有数据都有一列。我有一堆其他文件在我的目录中。我希望将值1(在本例中为1)与文件1匹配,将值2与文件2等匹配,依此类推。所以这就是我做的......
代码:
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'命令..如果有一种简单的方法可以做到这一点,我没有看到它。
干杯, ķ
答案 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