head    3.8;
access;
symbols;
locks; strict;
comment @# @;


3.8
date    2007.06.29.00.42.51;    author aki;     state Exp;
branches;
next    3.7;

3.7
date    2007.06.28.05.04.30;    author aki;     state Exp;
branches;
next    3.6;

3.6
date    2007.06.27.00.28.42;    author aki;     state Exp;
branches;
next    3.5;

3.5
date    2007.06.26.05.52.15;    author aki;     state Exp;
branches;
next    3.4;

3.4
date    2007.06.26.05.22.04;    author aki;     state Exp;
branches;
next    3.3;

3.3
date    2007.06.26.02.07.29;    author aki;     state Exp;
branches;
next    3.2;

3.2
date    2007.06.22.06.55.14;    author aki;     state Exp;
branches;
next    3.1;

3.1
date    2007.06.21.08.14.22;    author aki;     state Exp;
branches;
next    2.14;

2.14
date    2007.06.21.06.56.24;    author aki;     state Exp;
branches;
next    2.13;

2.13
date    2007.06.21.06.05.20;    author aki;     state Exp;
branches;
next    2.12;

2.12
date    2007.06.21.05.38.12;    author aki;     state Exp;
branches;
next    2.11;

2.11
date    2007.06.21.04.17.38;    author aki;     state Exp;
branches;
next    2.10;

2.10
date    2007.06.21.02.33.45;    author aki;     state Exp;
branches;
next    2.9;

2.9
date    2007.06.21.02.25.43;    author aki;     state Exp;
branches;
next    2.8;

2.8
date    2007.06.21.02.03.58;    author aki;     state Exp;
branches;
next    2.7;

2.7
date    2007.06.21.01.30.21;    author aki;     state Exp;
branches;
next    2.6;

2.6
date    2007.06.20.08.41.37;    author aki;     state Exp;
branches;
next    2.5;

2.5
date    2007.06.20.07.54.58;    author aki;     state Exp;
branches;
next    2.4;

2.4
date    2007.06.20.06.40.05;    author aki;     state Exp;
branches;
next    2.3;

2.3
date    2007.06.20.06.27.19;    author aki;     state Exp;
branches;
next    2.2;

2.2
date    2007.06.20.05.02.41;    author aki;     state Exp;
branches;
next    2.1;

2.1
date    2007.06.20.02.20.34;    author aki;     state Exp;
branches;
next    1.1;

1.1
date    2007.06.12.06.30.43;    author aki;     state Exp;
branches;
next    ;


desc
@@


3.8
log
@*** empty log message ***
@
text
@column: # make column f='vgs_n "Id(Mn)"'
       -@@cat |awk '\
function same(a,b,i){for(m=i=0;i<=length(a);i++)if(substr(a,i,1)==substr(b,i,1)){m++}{return (m==i)}} \
BEGIN{ \
       for(i=2;i<ARGC;i++){c[++c[0]]=ARGV[i]}ARGC=1 \
}/^#/{ \
       next \
}/^ /{ \
       for(i=1;i<=c[0];i++) \
       { \
               for(j=1;j<=NF;j++) { \
                       if(same($$j,c[i])) \
                       { \
                               f[i]=j; \
                               printf" %s%c",$$j,i==c[0]?"\n":"\t" \
                       } \
               } \
       } \
}/^[^ #]/{ \
       for(i=1;i<=c[0];i++){printf"%s%c",$$f[i],i==c[0]?"\n":"\t"} \
}' - $f

list: # make list f='vgs_n "Id(Mn)"'
       -@@cat |awk -v OFS=, '\
function same(a,b,i){for(m=i=0;i<=length(a);i++)if(substr(a,i,1)==substr(b,i,1)){m++}{return (m==i)}} \
BEGIN{ \
       for(i=2;i<ARGC;i++){c[++c[0]]=ARGV[i]}ARGC=1 \
}/^#/{ \
       next \
}/^ /{ \
       for(i=1;i<=c[0];i++) \
       { \
               for(j=1;j<=NF;j++) { \
                       if(same($$j,c[i])) \
                       { \
                               printf"%d%c",j,i==c[0]?"\n":OFS \
                       } \
               } \
       } \
}/^[^ #]/{ \
       exit \
}' - $f

plot: #make plot
       -@@(echo 'plot "-" with lines';cat;echo e) |gnuplot -persist

ascii:
       -@@awk ' \
/^#/{ \
       next ; \
}/^ /{ \
       printf"Flags: real forward %s\n",(NF>2)?"stepped":""; \
       param[0] = NF ; \
       for(i=1;i<=NF;i++){param[i]=$$i} \
}/^[^ ]/{ \
       l[record++] = $$0 ; \
}BEGIN{ \
       print "Title: * '$${HOSTNAME}' '$${PWD}'" ; \
       "LANG= date"|getline; \
       print "Date: "$$0 ; \
       print "Plotname: Generated from a .rdb file" ; \
}END{ \
       print "No. Variables:   "param[0] ; \
       print "No. Points:      "record ; \
       print "Offset: 0" ; \
       print "Variables:" ; \
       for(i=0;i<param[0];i++) \
       { \
               $$0=param[i+1] ; \
               printf"\t%d     %s      %s\n",i,$$0,\
               (/^[vV]/)?"voltage":(/^[iI]/)?"device_current":"parameter" ; \
       } \
       print "Values:" ; \
       if (param[0]>2) { \
               for(j=0;j<record;j++) \
               { \
                       printf"%d\t",j ; \
                       $$0=l[j] ; \
                       for(i=1;i<=NF;i++) \
                       { \
                               print "\t"$$i ; \
                       } \
               } \
       } \
       else \
       { \
               for(i=0;i<record;i++) \
               { \
                       print "\t"l[i] ; \
               } \
       } \
}'

sx:
       -@@cat |awk -v OFS='\t' ' \
/^#/{ \
       next ; \
}/^ /{ \
       gsub(/\r/,"") ; \
       abscissa=$$1 ; \
       ordinate=$$2 ; \
       printf" %s\t %s\t d_%s\t dd_%s\n",abscissa,ordinate,ordinate,oridinate >"/dev/stderr" ; \
       pline=$$0 ; \
}{ \
       ZDY=zdy+1e-15 ; \
       if($$0!=pline) \
       { \
               gsub(/\r/,"") ; \
               dx = $$1 - zx ; \
               zx = $$1 ; \
               dy = $$2 - zy ; \
               zy = $$2 ; \
               ddy = dy - zdy ; \
               zdy = dy ; \
               printf"%g\t%g\t%g\t%g\n",$$1,$$2,dy,ddy >"/dev/stderr" ; \
               if (record > 2 && ddy * zddy <= 0) \
               { \
                       last_slope=dx/ZDY ; \
                       print "#slope"last_slope >"/dev/stderr" ; \
                       last_intercept=zx-dx*zy/ZDY ; \
                       print"#xintercept"last_intercept >"/dev/stderr" ; \
                       found++ ; \
               } \
               zddy=ddy ; \
               record++ ; \
       } \
       pline=$$0 ; \
}END{ \
       if (record > 0) \
       { \
               print " slope"," xintercept" ;\
               print found?last_slope:dx/ZDY, \
                       found?last_intercept:zx-dx*zy/ZDY ; \
               exit 0 \
       } \
       exit 1 \
}' 2>/dev/null

dat: #gnuplot .dat file # make dat p=4
       -@@cat |awk -v OFS='\t' -v p=$$p -F'\t' ' \
$$p!=l[p]{ \
       print"" ; \
} { \
       print ; \
       split($$0,l) ; \
}'

d:
       -@@cat |awk -v OFS='\t' -F'\t' ' \
/^#/{ \
       gsub(/\r/,"") ; \
       gsub("#","",$$NF) ;\
       $$NF="#"$$NF"\t#d"$$NF ; \
       print$$0 ; \
       pline=$$0 ; \
}{ \
       if($$0!=pline) \
       { \
               gsub(/\r/,"") ; \
               print$$0,$$NF-last ; \
               last = $$NF ; \
       } \
       pline=$$0 ; \
}' 2>/dev/null

sxp: #make sxp x=4  y=6 [ #p1 #p2 ... #pn  #x #y1 #y2 #y ... #dy #ddy ]
       -@@cat |awk -v OFS='\t' -v x=$$x -v y=$$y -F'\t' ' \
/^#/{ \
       print $$0,"#slope","#xintercept" ; \
       pline=$$0 ; \
}{ \
       if($$0!=pline) \
       { \
               dx = $$x - zx ; \
               zx = $$x ; \
               dy = $$(NF-1) ; \
               zy = $$y ; \
               ddy = $$NF ; \
               zdy = $$(NF-1) ; \
               if (record > 2 && ddy * zddy <= 0) \
               { \
                       ZDY=zdy+1e-15 ; \
                       last_slope=dx/ZDY ; \
                       last_intercept=zx-dx*zy/ZDY ; \
                       print $$0,last_slope,last_intercept ; \
               } \
               zddy = $$NF ; \
               record ++ ; \
       } \
       pline=$$0 ; \
}'

last:
       -@@ awk '$1!=p[1]||$2!=p[2]||$3!=p[3]{print pline}{split($0,p);pline=$0}'

ltspice: # <in make ltspice >out
       -@@cat|awk ' \
NR==1{ \
               for(i=1;i<=NF;i++){printf" "$$i;if(i!=NF){printf"\t"}}\
}/^Step/ && !headered++ { \
               for(f=1;f<=NF;f++) if($$f~/=/) \
               { \
                       param[0]++ ;\
                       label=$$f ;\
                       gsub("=.*$$","",label) ; \
                       printf"\t "label ; \
               } \
               printf"\n" ;\
}/^Step/{ \
               p=0 ;\
               for(f=1;f<=NF;f++) if($$f~/=/) \
               { \
                       gsub("^.*=","",$$f);gsub("n$$","e-9",$$f); \
                       gsub("u$$","e-6",$$f);gsub("m$$","e-3",$$f); \
                       param[++p]=$$f ;\
               } \
}/^\t/{ \
       if(!headered++) {printf"\n"}\
       sub("^\t","");printf$$0 ;\
       if (param[0]) for(p=1;p<=param[0];p++) \
       { \
               printf"\t%s",param[p] \
       } \
       printf"\n" ;\
}'|tr -d '\r'
@


3.7
log
@*** empty log message ***
@
text
@d1 22
d45 1
a45 41
       -@@awk ' \
BEGIN{ \
       print"plot \"-\" with lines" ; \
}END{ \
       print"e" ; \
}/#/||/^ /{ \
       next \
}{ \
       print $$1,$$2 \
}' |gnuplot -persist

s-vb: #vbs='Vbs' file='file vgs='Vgs' log='log(Id)' length='Lgate' make s-vb
       -@@set $$($(MAKE) -s steps f=$$vbs <${file}) ; \
       >,vbs ; echo ' '$$1 >,vbs ;shift ; \
       for i ;\
               do echo $$i >>,vbs ;\
               awk ' \
               /^#/{ \
                       next \
               }/^ /||$$'$${f}'=='$${i}'&&$$'$${l}'==200e-9{ \
                       print \
               }' <${file} | \
               cut -sf $$x,$$y | \
               $(MAKE) -s sfactor-vth ; \
       done | \
       awk '/^ /{if(NR==1){print" "$$1}}/^[^ ]/{print$$1}' | \
       paste ,vbs - | sort -g |$(MAKE) -s ascii ;
       -@@rm ,vbs

field-name-with-paren:
       awk '/^#/{next}/^ /{for(i=1;i<=NF;i++)if($i~/^'Id\\\(Mn\\\)'$/){print$i}}' split.table |less
row-extraction:
       awk -F'\t' '/^#/{next}/^ /{gsub("^"," ");p()}{gsub("u","e-6");gsub("n","e-9")}$1==0.4e-6{p()}function p(){print$2"\t"$5}' <split.table |sort -k 2g |cat - -- -vte |less
column-shuffle:
       < <(cut -sf 5 split.table) paste - <(cut -sf 2 split.table) |paste - <(cut -sf 1 split.table) |cat -vte |head
pivot:
       join -t'        ' -1 3 -2 1 <(sort -t'  ' -k 3 list) <(sort -t' ' nature) |cat -vte
merge:
       sort -mu
steps:
       -@@cut -sf $f |sort -u
a110 2
               ddx = dx - zdx ; \
               zdx = dx ; \
d118 1
a118 1
                       last_slope=zdx/ZDY ; \
d120 1
a120 1
                       last_intercept=zx-zdx*zy/ZDY ; \
d132 2
a133 2
               print found?last_slope:zdx/ZDY, \
                       found?last_intercept:zx-zdx*zy/ZDY ; \
a137 1
# <tr/cl018tt.rdb awk -v OFS='\t' '/^ /{print;next}$4==0&&$5==2e-7{$3=log(-$3)/log(10);print}' |make column f="vgs 'Id(Mp)'" |make sx |awk -v OFS='\t' 'NR!=1{$1=$1/0.0254/2.3;print}'
d139 11
a149 2
sfactor-vth:
       -@@cat |awk ' \
a150 2
       next ; \
}/^ /{ \
d152 3
a154 3
       abscissa=$$1 ; \
       ordinate=$$2 ; \
       printf" %s\t %s\t d_%s\t dd_%s\n",abscissa,ordinate,ordinate,oridinate >"/dev/stderr" ; \
d160 2
a161 19
               dx = $$1 - zx ; \
               zx = $$1 ; \
               ddx = dx - zdx ; \
               zdx = dx ; \
               dy = $$2 - zy ; \
               zy = $$2 ; \
               ddy = dy - zdy ; \
               zdy = dy ; \
               printf"%g\t%g\t%g\t%g\n",$$1,$$2,dy,ddy >"/dev/stderr" ; \
               if (record > 2 && ddy <= 0 && zddy >= 0) \
               { \
                       ZDY=zdy+1e-15 ; \
                       last_slope=zdx/ZDY/2.3/.026 ; \
                       print "#slope"last_slope >"/dev/stderr" ; \
                       last_intercept=zx-zdx*zy/ZDY ; \
                       print"#xintercept"last_intercept >"/dev/stderr" ; \
               } \
               zddy=ddy ; \
               record++ ; \
a163 8
}END{ \
       if (record > 0) \
       { \
               print " slope\t xintercept" ;\
               print last_slope"\t"last_intercept ; \
               exit 0 \
       } \
       exit 1 \
d166 7
a172 9
column: # make column f='vgs_n "Id(Mn)"'
       -@@cat |awk '\
function same(a,b,i){for(m=i=0;i<=length(a);i++)if(substr(a,i,1)==substr(b,i,1)){m++}{return (m==i)}} \
BEGIN{ \
       for(i=2;i<ARGC;i++){c[++c[0]]=ARGV[i]}ARGC=1 \
}/^#/{ \
       next \
}/^ /{ \
       for(i=1;i<=c[0];i++) \
d174 12
a185 6
               for(j=1;j<=NF;j++) { \
                       if(same($$j,c[i])) \
                       { \
                               f[i]=j; \
                               printf" %s%c",$$j,i==c[0]?"\n":"\t" \
                       } \
d187 2
d190 5
a194 3
}/^[^ #]/{ \
       for(i=1;i<=c[0];i++){printf"%s%c",$$f[i],i==c[0]?"\n":"\t"} \
}' - $f
@


3.6
log
@*** empty log message ***
@
text
@d1 21
a204 21
list: # make list f='vgs_n "Id(Mn)"'
       -@@cat |awk '\
function same(a,b,i){for(m=i=0;i<=length(a);i++)if(substr(a,i,1)==substr(b,i,1)){m++}{return (m==i)}} \
BEGIN{ \
       for(i=2;i<ARGC;i++){c[++c[0]]=ARGV[i]}ARGC=1 \
}/^#/{ \
       next \
}/^ /{ \
       for(i=1;i<=c[0];i++) \
       { \
               for(j=1;j<=NF;j++) { \
                       if(same($$j,c[i])) \
                       { \
                               printf"%d%c",j,i==c[0]?"\n":"," \
                       } \
               } \
       } \
}/^[^ #]/{ \
       exit \
}' - $f

@


3.5
log
@*** empty log message ***
@
text
@d4 1
a4 1
       print"plot \"-\"" ; \
d115 1
a115 1
               if (record > 2 && ddy <= 0 && zddy >= 0) \
@


3.4
log
@*** empty log message ***
@
text
@d137 1
@


3.3
log
@*** empty log message ***
@
text
@d1 1
a1 1
gnuplot: #make gnuplot |gnuplot
d4 1
a4 2
       print"f(x)=(x-0.963124)/1161.64" ; \
       print"plot [] [0:] f(x),\"-\"" ; \
d11 1
a11 1
}'
d91 2
a92 2
slope-xintercept:
       -@@cat |awk ' \
a114 2
               last_slope=zdx/ZDY ; \
               last_intercept=zx-zdx*zy/ZDY ; \
d121 1
d130 3
a132 2
               print " slope\t xintercept" ;\
               print last_slope"\t"last_intercept ; \
@


3.2
log
@*** empty log message ***
@
text
@d4 2
a5 2
       print"f(x)=(x-0.70163)/601915./2.3/.026" ; \
       print"set term svg\nset out \"test.svg\"\nplot [0:1.8] f(x),\"-\"" ; \
d11 1
a11 1
       print $$1,$$3 \
d92 47
@


3.1
log
@added s-vb demonstration
@
text
@d1 13
@


2.14
log
@*** empty log message ***
@
text
@d1 17
a17 3
vt-vg-vb:
       set $$($(MAKE) -s steps <${file}) ;name=$$1 ;shift ;echo $$name,$$#  ;\
       for i ;do echo $$i ;done
d79 1
a79 1
slope_xintercept:
@


2.13
log
@*** empty log message ***
@
text
@d1 4
d15 3
@


2.12
log
@*** empty log message ***
@
text
@d38 17
a54 2
       for(i=0;i<record;i++) { \
               print "\t"l[i] ; \
@


2.11
log
@now stderr in .rdb
@
text
@d11 31
@


2.10
log
@*** empty log message ***
@
text
@d20 1
a20 1
       print abscissa,ordinate >"/dev/stderr" ; \
d34 1
a34 1
               print $$1" "$$2" "dy" "ddy >"/dev/stderr" ; \
d39 1
a39 1
                       print "-->"last_slope"<--" >"/dev/stderr" ; \
d41 1
a41 1
                       print "-->"last_intercept"<--" >"/dev/stderr" ; \
d100 1
a100 1
ltspice: <in make ltspice >out
@


2.9
log
@added slope_xintercept
@
text
@d50 2
a51 2
               print last_slope ; \
               print last_intercept ; \
@


2.8
log
@*** empty log message ***
@
text
@d12 5
a16 8
slope:
       cat |awk ' \
NR==1{ \
       if (NF < 2) \
       { \
               record = 0 ; \
               exit 1 ; \
       } \
d20 1
a20 1
}/^Step/{ \
d22 1
a22 19
       gsub(/[):(]\r/,"") ; \
       gsub(/[\/=]/," ") ; \
       if ($$6>$$7) \
       { \
               record = 0 ; \
               exit 1 ; \
       } \
       if ($$6=="1") \
       { \
               print $$6,$$3,$$4"\t"abscissa,ordinate >"/dev/stderr" ; \
               step_var=$$3 ; \
               step_value=$$4 ; \
               record ++ ; \
       } \
       else if (record > 0) \
       { \
               exit 0 ; \
       } \
}record&&/^     /{ \
d38 4
a41 10
                       if (ordinate ~ /log/) \
                       { \
                               last_slope=zdx/ZDY/2.3/.026 ; \
                               print "-->"last_slope"<--" >"/dev/stderr" \
                       } \
                       else \
                       { \
                               last_intercept=zx-zdx*zy/ZDY ; \
                               print "-->"last_intercept"<--" >"/dev/stderr" \
                       } \
d50 2
a51 12
               sub(/n$$/,"e-9",step_value) ; \
               sub(/u$$/,"e-6",step_value) ; \
               sub(/m$$/,"e-3",step_value) ; \
               printf step_var" "step_value" "ordinate ; \
               if (ordinate ~ /log/) \
               { \
                       print "_slope "last_slope \
               } \
               else \
               { \
                       print "_intercept "last_intercept \
               } \
@


2.7
log
@added list
@
text
@d12 83
a94 1
list:
d115 1
a115 1
column:
d137 1
a137 1
ltspice:
@


2.6
log
@*** empty log message ***
@
text
@d12 21
@


2.5
log
@*** empty log message ***
@
text
@d11 1
d13 21
a33 1
       cat |awk 'BEGIN{for(c=2;c<ARGC;c++){print ARGV[c]}ARGC=1}' - $f
@


2.4
log
@*** empty log message ***
@
text
@d14 29
a42 3
       -@@cat |awk 'NR==1{NH=NF;gsub("^"," ");header=$$0} \
/^Step/{for(f=1;f<=NF;f++)if($$f~/=/){gsub("="," ");gsub("n$$","e-9",$$4);gsub("u$$","e-6",$$4);gsub("m$$","e-3",$$4);step=$$4;if(!done++){$$0=$$3"\t"header;for(i=1;i<=NH+1;i++){printf" %s%c",$$i,i==NH+1?"\n":"\t"}}}} \
/^\t/{print step$$0}'|tr -d '\r'
@


2.3
log
@*** empty log message ***
@
text
@a0 1
SUFFIXES:.rdb .txt
d13 4
a16 2
txt.rdb:
       cat $<|awk 'NR==1{NH=NF;header=$$0}/^Step/{gsub("="," ");gsub("n","e-9",$$4);gsub("u","e-6",$$4);step=$$4;if(!done++){$$0=$$3"\t"header;gsub("[\(\)]","_");for(i=1;i<=NH+1;i++){printf"\001%s%c",$$i,i==NH+1?"\n":"\t"}}}/^\t/{print step$$0}'|tr -d '\r'
@


2.2
log
@*** empty log message ***
@
text
@d1 1
d14 2
@


2.1
log
@*** empty log message ***
@
text
@d1 2
d6 7
a12 1
< <(cut -sf 5 split.table) paste - <(cut -sf 2 split.table) |paste - <(cut -sf 1 split.table) |cat -vte |head
@


1.1
log
@Initial revision
@
text
@d1 4
a4 21
split:
       csplit -z - /^[A-Za-z]/ {*}
ltjoin:
       head -n 1 xx00 |(cat ;tail -n +2 $<)
join:
       join xx00 xx01 |join - xx02 |sed '/^[0-9]/s/^/\t/'
ascii:
       @@echo Title: \* hostname pwd filename
       @@echo Date: Mon Jun 11 10:10:35 JST 2007
       @@echo Plotname: Manually constructed file
       @@echo Flags: real forward stepped
       @@echo No. Variables:   4
       @@echo No. Points:      20
       @@echo Offset: 0
       @@echo Variables:
       @@echo '        '0      Lgate   length
       @@echo '        '1      n       parameter
       @@echo '        '2      SatVt   voltage
       @@echo '        '3      LinVt   voltage
       @@echo Values:
       @@join xx00 xx01 |join - xx02 |sed '/^[0-9]/s/^/\t/' |tail -n +2
@