シェルコマンドを利用して複数のファイル名を変えたり複数のファイルをプロットしたり
こんにちは。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番目の要素を取り出してくれる。
間違い、補足等あったらコメントなどで教えて下さい。