먼저 다른 필드를 쉽게 파싱 할 수 있도록해야합니다. 간단한 방법은
tr ";" " " <logfile|awkscript
둘째를 사용하여 공간에 세미콜론을 변경하는 것입니다, 당신은 낮은과 높은 값의 테이블을 작성해야합니다. 색인이 열의 이름 인 연관 배열을 사용하고 있습니다. 나는 BEGIN 섹션에서 이것을한다.
값이 낮은 값과 높은 값 사이에 있으면 계산해야합니다. 중간 섹션에서이 작업을 수행합니다.
END 섹션에서 값을 출력합니다. 나는 당신의 데이터를이 프로그램을 실행할 때
#!/usr/bin/awk -f
BEGIN {
low["<1ms"]=0;high["<1ms"]=1
low["1-10ms"]=1;high["1-10ms"]=10
low["10-100ms"]=10;high["10-100ms"]=100
low["100-500ms"]=100;high["100-500ms"]=500
low[">500ms"]=500;high[">500ms"]=1000000000
}
{
# Middle section - for each line
duration=$3
for (i in high) {
if ((duration > low[i]) && (duration <= high[i])) {
# printf("duration: %d, low: %s,high: %s\n", duration, low[i], high[i]);
total+=duration # total duration
bin[i]++ # store a count into different bins
count++ # total number of measurements
}
}
}
END {
average=total/count
FMT="%-10s %10s %10s %10s %10s %10s\n"
NFMT="%-10.3f %10s %10s %10s %10s %10s\n"
printf(FMT,"AVG", "<1ms", "1-10ms", "10-100ms", "100-500ms", "500+ms")
printf(NFMT,average, bin["<1ms"], bin["1-10ms"], bin["10-100ms"], bin["100-500m\
s"], bin["500+ms"])
}
, 나는 [당신이 시도 무엇] (HTTP를
AVG <1ms 1-10ms 10-100ms 100-500ms 500+ms
282.916 4
를 얻을 : 나는 확실히 헤더와 값을 잘 줄 수 있도록이 유사한의 printf 형식 문자열을 사용 : //mattgemmell.com/2008/12/08/what-have-you-tried/)? 그리고 그 질문은 무엇입니까? – creinig
Awk Tutorial (http://www.grymoire.com/Unix/Awk.html)과이 질문 (http://stackoverflow.com/questions/10047817/parsing-log-lines-using-awk)을보십시오. –
감사합니다. Awk는 나의 첫 번째 생각 이었지만, 이제 그 모든 것. 나는 붙어있다. –