시나리오:
다음과 같은 "클래스" 항목이 포함된 로그 파일이 있습니다.
R0 dx=0.00500 rb=0.00000 sn=1 3145.88 2.59 0.08 se=21315 id=16190
R0 dx=0.00300 rb=-1.00000 sn=1 3150.40 2.38 0.05 se=21316 id=16191
R1 dx=-0.00500 rb=1.00000 sn=-1 3155.14 2.54 0.05 se=21317 id=16192
R1 dx=-0.02000 rb=-1.00000 sn=-1 3157.73 2.48 0.10 se=21318 id=16193
R0 dx=-0.02000 rb=0.00000 sn=-1 3160.59 2.74 0.08 se=21319 id=16194
R1 dx=0.00500 rb=1.00000 sn=1 3165.18 2.43 0.10 se=21320 id=16195
R0 dx=0.00100 rb=-1.00000 sn=1 3167.84 2.53 0.05 se=21321 id=16196
R3 dx=0.00100 rb=1.00000 sn=1 3170.11 0.10 0.10 se=21322 id=16197
나는 tail -F
(tail -F 경고음을 울리는 방법이 있습니까?)
내 질문은 다음과 같습니다예를 들어 "R1 라인 수 대 R0 라인 수"의 슬라이딩(이동) 비율을 계산하는 방법이 있습니까? 이 비율을 인쇄하는 것 외에도 다른 도구(예: gnuplot)에 전달하여 플롯할 수 있어야 합니다(약간 무리일 수 있음).
분명히 이것은 Python, MATLAB 또는 Octave에서 수행하는 상당히 사소한 일이지만 셸에서 이 작업을 수행하는 방법을 매우 배우고 싶고 까다로운 부분은 업데이트하기 위해 값을 플로팅 유틸리티에 전달하는 것입니다. 줄거리.
답변1
한 줄에 한 번씩 tail -F 경고음을 울립니다.
bel=`echo foo | tr -c -s '\007' '\007'`
tail -F file | sed "s/\$/$bel/"
셸을 사용하여 이동 평균을 계산하는 경우 $windowsize 크기의 이동 창 내에서 R0 및 R1 행 수를 추적하는 bash 스크립트가 있습니다. 추적 변수는 r0sum 및 r1sum입니다.
windowsize=10
declare -ai isr0line isr1line r0sum r1sum i
for ((i=0; $i<$windowsize;i+=1)) ; do isr0line[$i]=0; isr1line[$i]=0; done
i=0
while read line
do
r0sum=$(($r0sum - ${isr0line[$i]}))
r1sum=$(($r1sum - ${isr1line[$i]}))
case "$line" in
R0*) isr0line[$i]=1; isr1line[$i]=0; ;;
R1*) isr1line[$i]=1; isr0line[$i]=0; ;;
*) isr0line[$i]=0; isr1line[$i]=0; ;;
esac
r0sum=$(($r0sum + ${isr0line[$i]}))
r1sum=$(($r1sum + ${isr1line[$i]}))
echo "R0 lines $r0sum R1 lines $r1sum"
i=$((($i + 1) % $windowsize))
done
답변2
다음을 기준으로 로그를 필터링합니다.
awk '/^R1/ { r1++ } ; /^R0/ { r0++ } ; r0 > 0 { print r1/r0 }'
그러면 첫 번째 R0 이후 각 행에 대한 "실행 비율"이 출력됩니다.
다음은 슬라이딩 비율입니다(죄송합니다. "비율"의 의미를 잘못 이해했습니다).
BEGIN { winsize=10; h=t=r0=r1=0 }
/^R0/ { r0++ }
/^R1/ { r1++ }
{ print r1 ":" r0 ; buf[h++] = $1 }
h - t >= winsize { r = buf[t]; delete buf[t++] }
r ~ /R1/ { r1-- }
r ~ /R0/ { r0-- }
이 변수는 winsize
창 크기를 보유합니다. 여기서 정규식은 중복되지만 키 입력을 저장합니다. 테스트는 $1 == "R0"
및 일 수 있습니다 r == "R0"
.