#! /usr/bin/awk -f BEGIN { maxP = 1050 minP = -100 } /^H/{ t=$2 } /^P/ { Word1 = strtonum($2) Word2 = strtonum($3) Word3 = strtonum($4) Word4 = strtonum($5) D1 = strtonum($6) D2 = strtonum($7) if (D2<10) next C1 = rshift(Word1, 1) C2 = or(lshift(and(Word3, 0x3f), 6), and(Word4, 0x3f)) C3 = rshift(Word4, 6) C4 = rshift(Word3, 6) C5 = or(lshift(and(Word1, 1), 10), rshift(Word2, 6)) C6 = and(Word2, 0x3f) UT1 = 8*C5+20224 dT = D2 - UT1 Temperature = 0.1*(200 + dT*(C6+50)/1024) OFF = C2*4 + ((C4-512)*dT)/4096 SENS = C1 + (C3*dT)/1024 + 24576 X = (SENS * (D1-7168))/16384 - OFF Pressure = 0.1*(X*10/32 + 2500) if (Pressure >= minP && Pressure <= maxP) { printf "P%s %u %6.2f %7.2f\n", $1, t, Temperature, Pressure } }