Mapping a value in BASH
Revision as of 11:11, 17 April 2014 by Michael Murtaugh (talk | contribs) (Created page with "A typical operation with (re)processing data for visualisation or other manipulation is the translation of some value (number) from one context to another. (In math terms you ...")
A typical operation with (re)processing data for visualisation or other manipulation is the translation of some value (number) from one context to another. (In math terms you call this a mapping from a domain to a range.) In the BASH this can be tricky as maths are limited to being integer only -- so trying to work with a value like 0.5 won't work. In the example shown, the value 100 is used to multiply the input value to get a bit more precision. A higher value could be used for more precision (like 1000, 1000000). If this number is too big though (depending on the input / output numbers) you could get into trouble.
# map some value from inlo to inhi to a new range: outlow, outhi
function map {
i=$1
inlo=$2
inhi=$3
outlo=$4
outhi=$5
p=$(( (i*100) / (inhi-inlo) ))
o=$(( outlo + (p * (outhi-outlo) / 100) ))
echo $o
}
out=`map 50 0 100 5000 10000`
echo out $out