0

cshフォーマットを使用してからしばらく経ちましたが、いくつかの問題が発生しています。Matlabでの実行は非常に簡単に思えますが、操作しようとしているプログラムのために、ターミナルでこれを実行する必要があります。

これが私がやりたいことです:私はこのように構成されたファイルdel.txtを持っています

1

2

3

4

したがって、各値は独自の行にあり、すべてのデータに対して1つの列があります。ディレクトリ内に他のファイルがたくさんあります。たとえば、値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

終わり

sac macro.m

rm macro.m

終わり

終わり

ただし、私が達成したのは、del.txt内のすべての値と各ファイルをループしてから、ディレクトリ内の次のファイルに移動し、すべての値をループすることです。正しい値を一致させるためにこれがどのような形式であるかを理解するのに問題があります。それらを一致させることができるまで、私はまだスクリプト内で多くのことをしていません。助けてください誰かが私が間違っていることを教えてもらえますか?foreachコマンドが各ファイルのすべてのコマンドを実行することを読みましたが、これを回避する方法を見つけることができませんでした。私がやりたいのは、del.txtから値1を取得し、ディレクトリからファイル1(sta)と照合してループを終了し、次にdel.txtから値2を取得して、ディレクトリからファイル2と照合することです( sta)。ファイルの1つのサブセットに対して、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 に答える