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
@