オタクof数理の共同ブログ

京大情報学科数理工学コースの学生4人による共同ブログです

シェルコマンドを利用して複数のファイル名を変えたり複数のファイルをプロットしたり

こんにちは。zalgo(@zalgo3)です。

最近知ったことをメモ書き程度にまとめておきます。

ディレクトリの中にある.datのファイルの拡張子を.txtに変えたいとき。
for i in *.dat; do
mv $i ${i%.dat}.txt;
done

*はワイルドカード。任意の文字列に対応します。
forループで、文字列'*.dat'を変数iに代入しています。
$は変数の中身を参照するコマンド。
パスを追加するときに、

PATH=$PATH:/hoge/bin

とかやるのは、変数PATHに、PATHの中身の末尾に/hoge/binを追加したものを代入するという意味。
%は末尾の対応する文字列を取り去った文字列を表す。
i%.datの中身には*だけが入っていて、そこに.txtをつける。

ディレクトリの中にある.datのファイルをすべて.epsでplotする

gnuplot v4.6から追加されたらしいdo forというコマンドを使う。

set term postscript eps
in = system("ls *.dat")
out = system("for i in *.dat; do echo ${i%.dat}.eps; done")
do for [n=1:words(in)]{
set output word(out,n)
p word(in,n) w l
}
q

system()を使うとシェル上でコマンドを実行できる。
つまり、inという変数には、ls *.datでヒットしたファイル名が配列として入っている。
words(array)は配列の要素数を数えてくれる。
word(array,n)は配列のn番目の要素を取り出してくれる。

間違い、補足等あったらコメントなどで教えて下さい。