ラベル zsh の投稿を表示しています。 すべての投稿を表示
ラベル zsh の投稿を表示しています。 すべての投稿を表示

2012年10月30日火曜日

コマンドの出力結果から空白行を消す

HSPICEの出力結果は,ムダに空白行が多い.わかりにくいので,zshの関数を使って出力結果の空白行を削除してみた.ついでに,"***"から始まる行を消し,.lisに標準出力をリダイレクトするようにしてみた.
# cshなら引数をエイリアスに入れられるが,zshだと関数にしないといけないらしい.

function hspice-func () {
   local input_file_name
   input_file_name=$1
   hspice64 $1 | grep -v -e '^\s*$' | grep -v '\*\*\*' | tee ${1}.lis
}


1つめのgrepで,空白行に該当しなかった行を表示し,2つめのgrepで,***に該当しなかった行を表示させている.他に,grepを駆使しまくれば,いらないメッセージもどんどん消せるだろう.出力結果はなるべくシンプルにしたいものだ.

11/13追記:
grepで"***"を消してしまうと,HSPICEの出す***simulation concluded***というメッセージも消してしまうので,やめた方が良いかも.


2012年5月24日木曜日

gnuplotのプロット結果をzsh関数を使ってファイルに書き出す

測定結果をgnuplotでプロットする事が多いと思いますが,あとで微修正しようとして「ああ,どういう条件でプロットしたか忘れた!」と言うこと,よくありますよね.私は一つの図に対して一つのgnuplotのコマンドファイルを用意するようにしているのですが,saveコマンドでは余計な変数定義が大量に挿入されること,replotがすべてplotに結合されてしまう事から,

(1) gnuplotに打ち込んだコマンドをヤンク

(2) テキストエディタにコピー

(3) gnuplotのターミナル等を手動で消す

という作業をしていました.
zed等を使っていたのですが,もっと効率的に作業できないかと思い,zshの関数zed-plt()を作ったので公開してみる.~/.zshrcに書き込むだけ!


function zed-plt () {
local zed_file_name
zed_file_name=$1
echo "usage: C-xC-w:save C-c:cancel"
zed $zed_file_name
if [[ -f $zed_file_name ]] then
sed -e "s/gnuplot> //g;/Terminal type set to/D;/Options are/D" $zed_file_name > tmpfile.plt
mv tmpfile.plt $zed_file_name
fi
return 0
}


使い方は
% zed-plt "filename.plt"
でまずzedが開くので,ここにgnuplotに打ち込んだコマンドをコピー&ペースト
その後C-x,C-wでzedをセーブすると,sedで不要な文字列を削除という流れ.

% zed-plt hoge.plt
usage: C-xC-w:save C-c:cancel
gnuplot> plot "Sec4-VCCS-Current.txt" w lp
gnuplot> set yrange [0:200]
gnuplot> set size 0.7,0.7
gnuplot> replot
gnuplot> set terminal tgif 24
Terminal type set to 'tgif'
Options are 'portrait [1,1] color linewidth 1.000000 dashed "Helvetica" 24'
gnuplot> set output "Sec4-VCCS-Current.obj"
gnuplot> replot
gnuplot> exit
% cat hoge.plt
plot "Sec4-VCCS-Current.txt" w lp
set yrange [0:200]
set size 0.7,0.7
replot
set terminal tgif 24
set output "Sec4-VCCS-Current.obj"
replot
exit


お手軽にコマンドをセーブできるようになって上機嫌!