정수와 부동 소수점이 혼합된 경우 RRDtool 업데이트가 작동하지 않습니다.

정수와 부동 소수점이 혼합된 경우 RRDtool 업데이트가 작동하지 않습니다.

내 라우터에 대한 ADSL 통계를 저장하려고 합니다. 업데이트 스크립트에서와 동일한 명령을 사용한 후 이제 올바른 값을 표시하므로 다른 사용자에게는 rrdtool info를 실행하지 않았습니다. 신기하게도 실제 부동소수점 값은 잘 저장됩니다.

두 값 모두 GAUGE입니다.

root@pi:/scripts# ./routerstats.sh&&rrdtool info rrd/attn.rrd|grep last 
+ awk ' /^Max/      { maxup = $5; maxdown = $10; }
    /^Channel/  { curup = $6; curdown = $11; }
    /^SNR/      { snrdown = $3; snrup = $4; }
    /^Attn/     { attndown = $2; attnup = $3; }
    /^Pwr/      { pwrdown = $2; pwrup = $3; }
    END     { up = sprintf("N:%s:%s", maxup, curup);
              down = sprintf("N:%s:%s", maxdown, curdown);
              snr = sprintf("N:%s:%s", snrdown, snrup);
              attn = sprintf("N:%s:%s", attndown, attnup);
              pwr = sprintf("N:%s:%s", pwrdown, pwrup);
              system("echo up " up);
              system("echo down " down);
              system("echo snr " snr);
              system("echo attn " attn);
              system("echo pwr " pwr);
              system("rrdtool update /scripts/rrd/up.rrd -t max N:" maxup);
              system("rrdtool update /scripts/rrd/down.rrd -t max N:" maxdown);
              system("rrdtool update /scripts/rrd/snr.rrd -t down N:" snrdown);
              system("rrdtool update /scripts/rrd/attn.rrd -t down N:" attndown);
              system("rrdtool update /scripts/rrd/pwr.rrd -t down N:" pwrdown);
              system("rrdtool update /scripts/rrd/up.rrd -t current N:" curup);
              system("rrdtool update /scripts/rrd/down.rrd -t current N:" curdown);
              system("rrdtool update /scripts/rrd/snr.rrd -t up N:" snrup);
              system("rrdtool update /scripts/rrd/attn.rrd -t up N:" attnup);
              system("rrdtool update /scripts/rrd/pwr.rrd -t up N:" pwrup);
            }'
up N:1080:512
down N:10788:2048
snr N:20.4:12.0
attn N:26.0:15.0
pwr N:5.1:4.0
' to float not complete: tail 'nversion of '12.0
' to float not complete: tail 'onversion of '15.0
' to float not complete: tail 'nversion of '4.0
last_update = 1441477923
ds[down].last_ds = "U"
ds[up].last_ds = "U"

데이터가 awk로 전달됩니다.

Status: Showtime
Last Retrain Reason:    0
Last initialization procedure status:   0
Max:    Upstream rate = 1120 Kbps, Downstream rate = 10816 Kbps
Channel:        FAST, Upstream rate = 512 Kbps, Downstream rate = 2048 Kbps

Link Power State:       L0
Mode:                   G.DMT 
TPS-TC:                 ATM Mode
Trellis:                ON
Line Status:            No Defect
Training Status:        Showtime
                Down            Up
SNR (dB):        21.4            12.0
Attn(dB):        26.0            15.0
Pwr(dBm):        5.0             2.9

답변1

오류 메시지가 얼마나 손상되었는지 판단하면 다음과 같습니다.

conversion of '12.0' to float not complete: tail '...'

데이터의 줄 끝에 캐리지 리턴이 있을 수 있습니다. 유닉스의 awk는 이러한 문자를 공백으로 처리하지 않습니다. 가장 간단한 해결책은 다음을 통해 데이터를 파이프하는 것입니다.

sed 's/\r$//'

예를 들어 awk에 전달하기 전에.

관련 정보