계속 업데이트되는 데이터 파일이 있습니다. gnuplot을 사용하여 업데이트 데이터 파일을 동적으로 플롯 (plot) 할 수 있습니다. 아마도 마지막 100 데이터 포인트의 창을 사용했을 것입니다.동적 Gnuplot 그래프
가능합니까? 그렇다면, 일부 포인터는 높이 평가됩니다.
계속 업데이트되는 데이터 파일이 있습니다. gnuplot을 사용하여 업데이트 데이터 파일을 동적으로 플롯 (plot) 할 수 있습니다. 아마도 마지막 100 데이터 포인트의 창을 사용했을 것입니다.동적 Gnuplot 그래프
가능합니까? 그렇다면, 일부 포인터는 높이 평가됩니다.
불행히도 Gnuplot에는 이러한 작업을 수행 할 수있는 내장형 방법이 없기 때문에 IIRC GNU plotutils가 제공합니다. 플롯 명령을
# An updating data file
while :; do echo $((RANDOM%100)); sleep .1; done > datafile
초기화의 gnuplot, 다른 업데이트가 replot에서 오게 :
(
echo "plot [0:100] [0:100] '< tail -n100 datafile' with lines";
while :; do sleep .4; echo replot; done
) | gnuplot -persist
어쨌든, 여기에 한 가지 방법은 당신의 gnuplot 일부 bash는 스크립트로 작업을 수행 할 수있어 이렇게하면 Gnuplot은 매초마다 tail -n100 datafile
을 평가하고 그 결과를 데이터 세트로 사용합니다. tail 명령은 datafile
의 마지막 100 행을 리턴합니다.
그것이 효과가있다. 감사! – mlomailom
를 플롯 gnuplot 구동 스크립트
#!/bin/bash
export DEST=${1:-google.com} DELAY=${2:-3} GPFD
openGnuPlot() {
local fd=1
while [ -e /dev/fd/$fd ];do ((fd++)) ;done
eval "exec $fd> >(gnuplot)"
GPFD=$fd
}
openGnuPlot
TMPDIR=/tmp
[ -d /dev/shm ] && [ -w /dev/shm ] && TMPDIR=/dev/shm
read TMPDATA < <(mktemp -p $TMPDIR --suffix .dat plot-XXXXXXXXXX)
trap "exec $GPFD>&-;[ -f $TMPDATA ]&&rm $TMPDATA;exit" 0 1 2 3 6 9 15
getDatas() {
read data < <(
ping -c 1 -n $DEST 2>&1 |
sed -u 's/^64.*time=\([0-9.]\+\) .*$/\1/p;d'
)
printf "%(%s)T %s\n" >>$TMPDATA -1 "$data"
printf "%(%a %b %d %T)T %s\n" -1 "$data"
}
getDatas
echo >/dev/fd/$GPFD "set term wxt noraise persist title 'Ping $DEST';"
echo >/dev/fd/$GPFD "set xdata time;"
echo >/dev/fd/$GPFD "set timefmt '%s';"
while :;do
sleep $DELAY
getDatas
echo >/dev/fd/$GPFD \
"plot '$TMPDATA' using 1:2 with line title 'ping $DEST';"
done
데모 : 복수의 호스트와
이 스크립트는 많은 동시 핑을하고 dynamicaly 다음 구문
#!/bin/bash
export DEST=${1:-google.com} DELAY=${2:-3} GPFD
openGnuPlot() {
local fd=1
while [ -e /dev/fd/$fd ];do ((fd++)) ;done
eval "exec $fd> >(gnuplot)"
GPFD=$fd
}
openGnuPlot
TMPDIR=/tmp
[ -d /dev/shm ] && [ -w /dev/shm ] && TMPDIR=/dev/shm
read TMPDATA < <(mktemp -p $TMPDIR --suffix .dat plot-XXXXXXXXXX)
trap "exec $GPFD>&-;[ -f $TMPDATA ]&&rm $TMPDATA;exit" 0 1 2 3 6 9 15
getDatas() {
local -A var tim
local host out
while IFS=$' \t:,()\n\r' read a b c d e f g h; do
case $a in
PING) printf -v var[$c] $b ;;
64) printf -v tim[${var[$d]}] ${g#*=} ;;
esac
done < <(for host; do ping -nc1 $host & sleep .01;done)
for host; do
out+=" "${tim[$host]:--1}
done
printf "%(%s)T %s\n" >>$TMPDATA -1 "$out"
printf "%(%a %b %d %T)T %s\n" -1 "$out"
}
echo >/dev/fd/$GPFD "set term wxt noraise persist title 'Ping $DEST';"
echo >/dev/fd/$GPFD "set xdata time;"
echo >/dev/fd/$GPFD "set timefmt '%s';"
plotlines=() fld=2
for host in $DEST;do
plotlines+=("'$TMPDATA' using 1:$((fld++)) with line title 'ping $host'")
done
IFS=, eval 'plotcmd="plot ${plotlines[*]};"'
getDatas $DEST
while :;do
sleep $DELAY
getDatas $DEST
echo >/dev/fd/$GPFD "$plotcmd"
done
샘플 실행을 그래프 : script.sh "stackoverflow.com google.com" 4
4 초 지연, 유래 및 구글 동시에에서 핑 그래프를 수행하십시오.
경고 : gif 애니메이션 지연이 완전히 가짜입니다!
어떤 OS가 실행되고 있습니까? Gnuplot의 어떤 버전입니까? –