プログラムがcshellのループで動作するときに新しいファイル名をどのように指定しますか?

プログラムがcshellのループで動作するときに新しいファイル名をどのように指定しますか?

.datファイルがたくさんありますが、これを.sacファイル(一種の地震計ファイル)に変換したいと思います。 xy2sacプログラムを使用してファイルを変換しましたが(コードを作成しませんでした)、変換されたファイルに新しい名前を付ける必要がありました。

コンバータコードは次のように動作します。

xy2sac filename.dat newfilename.sac

私がやりたいことは、xy2sacプログラムがループで動作している間に新しいファイル名を指定することです。たとえば、私のdatファイル名は次のようになります。

BRGA_KO_disp_post_mij_conv0000_E.dat
BRGA_KO_disp_post_mij_conv0000_E.dat
BRGA_KO_disp_post_mij_conv0000_N.dat
BRGA_KO_disp_post_mij_conv0000_Z.dat
GADA_KO_disp_post_mij_conv0000_E.dat
GADA_KO_disp_post_mij_conv0000_N.dat
GADA_KO_disp_post_mij_conv0000_Z.dat
HYBL_KO_disp_post_mij_conv0000_E.dat
HYBL_KO_disp_post_mij_conv0000_N.dat
HYBL_KO_disp_post_mij_conv0000_Z.dat
ISK_KO_disp_post_mij_conv0000_E.dat
ISK_KO_disp_post_mij_conv0000_N.dat
ISK_KO_disp_post_mij_conv0000_Z.dat
TUZL_KO_disp_post_mij_conv0000_E.dat
TUZL_KO_disp_post_mij_conv0000_N.dat
TUZL_KO_disp_post_mij_conv0000_Z.dat

名前を次に変更したいです。

BRGA_KO__E.sac
BRGA_KO__E.sac
BRGA_KO__N.sac
BRGA_KO__Z.sac
GADA_KO__E.sac
GADA_KO__N.sac
GADA_KO__Z.sac
HYBL_KO__E.sac
HYBL_KO__N.sac
HYBL_KO__Z.sac
ISK_KO__E.sac
ISK_KO__N.sac
ISK_KO__Z.sac
TUZL_KO__E.sac
TUZL_KO__N.sac
TUZL_KO__Z.sac

だから.datの前の最初の8文字と最後の文字を選択したいと思います。

どうすればいいですか?

このループを使用しましたが、うまくいかず、最終的に.datファイル拡張子ができました。

foreach file (`ls *.dat*`)
xy2sac *.dat *.sac << END
END
end

よろしくお願いします。

ベストアンサー1

cshより正常なシェルに変更:sできない場合

前任者。

#!/bin/csh -f

foreach file ( *.dat )
echo xy2sac $file $file:s/disp_post_mij_conv0000//:s/.dat/.sac/
end

echoファイル名が正しいと確信している場合は、削除してください。

おすすめ記事