ファイルの一覧を番号とともに標準出力に出力
<なにがしたいか>
- C:\home下のファイル一覧を"数字 ファイル名"みたいな感じでテキストを出力する。
- あえてawk使っているのは後でgnuplot中で使用するため。
1 foo.txt
2 bar.exe
...
みたいな出力がほしい。
<できたスクリプト>
row_ls.bat
dir "C:\home" /b | awk "{print NR,$0}"
<スクリプト中でやってること>
- dir/bでディレクトリ一覧を取得
- パイプ("|"←これ!)でawkに渡す
- awkが読み込んだ列数と、ファイル名を標準出力にprintしてくれる
( batchとして実行ではなく、コマンドだけコピーしてコマンドラインに打ち込むと通る。)
特定の行数だけ、ファイルの一覧を番号とともに標準出力に出力
<何がしたい>
- C:\home下のファイル一覧を"数字 ファイル名"みたいな感じで出力するのはさっきと同じ。
- 出力する数を限定したい。
- 例えばファイルを4番から7番まで出力したい
<できたスクリプト>
row_ls.bat2
dir "C:\home" /b | awk "NR== 4,NR==7 {print NR,$0}"
<スクリプト中でやってること>
- C:\home下のファイルネームをdirする
- パイプでawkへ渡す
- awkで4-7行目までを"行数, ファイルネーム"の順で取り出す
なお行数を示す数字なぞいらなければ{print NR,$0}
ではなく{print}
だけにすればよろしい。
順番にプロットして動画チックにする
<なにがしたいか>
- "C:\home\gnuplot\160101"というディレクトリ下にソートすると順番になるファイル群(例えば"data160101_1001_00.txt","data160101_1002_00.txt","data160101_1003_00.txt",..."data160101_1100_00.txt")があるとする。
- 指定したディレクトリ下のファイルネームを順番に取得してgnuplotの標準出力に連続して出力。
- set outputでgifを指定すればgifファイルが出来上がる。
<できたスクリプト>
dofor_get_filename.gp
outdrct='C:\home\gnuplot\160101\' #outdrctにrootディレクトリ格納
outdrct2='C:/home/gnuplot/160101/' #outdrctにrootディレクトリ格納
drctpath=sprintf("%srawdata\\trace",outdrct) # drctpathに目的のディレクトリ入れる(ココまではつなげてしまっても良い)
do for [i =1:100]{
command=sprintf('dir %s /b | awk "NR==%4.0f{print}"',drctpath,i) # ファイル名一覧を出力するdir /bしてパイプでawkに渡す
data=system(command)
print sprintf("%4.0f番目のファイルは%sです。",i,data)
dataname=outdrct2.'rawdata/trace/'.data
plot dataname
}
<スクリプト中でやってること>
outdrct内のファイルを連続でプロットするgp
- doforで取得する行を指定
- dir /bでファイル一覧を取得
- ファイル一覧のi番目のファイル名を取得
- 変数data,datanameに渡して連続してプロットする
順番にプロットして動画チックにする(よりシンプルに)
<できたスクリプト>
dofor_get_filename2.gp
outdrct='C:\home\gnuplot\160101\' #outdrctにrootディレクトリ格納
outdrct2='C:/home/gnuplot/160101/' #outdrctにrootディレクトリ格納
# cd outdrct.'rawdata/trace'
drctpath=sprintf("%srawdata\\trace",outdrct) # drctpathに目的のディレクトリ入れる(ココまではつなげてしまっても良い)
command=sprintf('dir %s /b | awk "{print}"',drctpath) # ファイル名一覧を出力するdir /bしてパイプでawkに渡す
list=system(command)
do for [data in list]{
dataname=outdrct2.'rawdata/trace/'.data
p[][-150:0] dataname w l lc "grey40" title data
}
<スクリプト中でやってること>
-
command
でawkによってファイル一覧を吐き出させるまではほぼ同じ。違うのは1行ずつではなく改行区切りで一気に出力※ - awkの出力を
list
という変数に格納 - list一行一行をdataに代入していくと、さっきと同じ結果になる。
※標準出力に出してみると改行区切りであるが、gnuplot上ではdo for [foo in "bar foobar ..."]
で有効なスペース区切りに解釈してくれるらしい。
補足:規則性があるならdo forの中でiとかの変数を引数にdataname決めればいいのですが、「順番には並んでいるけど規則性がない」場合にファイル名を取得してきて連続描画してくれるスクリプトがほしかったのです。