stdin에서 초당 라인 수를 계산하는 Unix / Linux 명령이 있습니까?


22

로그 파일에서 초당 SQL 쿼리 수를 계산하려고 시도하고 gred에서 stdout을 일부 명령으로 파이프하여 실시간으로 수행하려고합니다. (저는 성능 테스트를하고 있습니다)

나는 그것을 직접 쓸 수는 있지만 이것이 존재할 것이라고 생각했다.

나는 화장실을 보았지만 이것을 허용하는 옵션을 보지 못했습니다.

액세스 로그에서 꼬리를 파이핑하여 초당 요청 수를 계산하는 데 사용할 수도 있습니다.



나는 그 질문이 말하는 것보다 더 일반적으로 유용한 것을 찾고 있습니다.
digidigo

답변:


2
watch -n 3 "wc -l logfile"

맨 페이지

watch-출력을 전체 화면으로 보여주는 프로그램을 주기적으로 실행합니다. 기본적으로 프로그램은 2 초마다 실행됩니다. 다른 간격을 지정하려면 -n 또는 --interval을 사용하십시오.


45

pv당신의 명령입니다! P의 IPE의 V 데이터가 통과하고, 파이프 표준 출력에 직접 이상 stdin을하기 때문에, 파이프 라인 어디에서나 실행할 수 있습니다에 대한 인쇄 통계 iewer. 예를 들면 다음과 같습니다.

tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null

pv명령은 초당 현재 줄 수 (초당 바이트 수)를 stderr에 인쇄합니다.이 특정 데이터 소스 (Nginx의 기본 로그 파일)의 경우 초당 들어오는 웹 요청과 같습니다. 나는 카운트에만 신경을 쓰므로 stdout을에 파이프 /dev/null합니다. 다음과 같은 옵션도 있습니다 :

  • -b (총 라인 수),
  • --average-rate (시작 이후 평균 비율) 및
  • --timer (파이프가 얼마나 오래 걸 렸는지 추적합니다).

이라고 말하지 않으면 --line-mode바이트 수를 계산합니다. 이는 아마도 서버 로그에는 적합하지 않지만 다른 곳에서는 편리 할 수 ​​있습니다.

마지막 참고 사항 ... | pv -lb > file.txt은과 비슷 ... | tee file.txt | awk '{printf "\r%lu", NR}'하며 줄을 계산하는 데 유용 pv하지만 출력이 그리 흥미롭지는 않지만 호출은 훨씬 짧 pv습니다. 기본적으로 매초마다 업데이트되지만 awk명령은 지속적으로 업데이트됩니다.


pv에서 하나의 값만 얻을 수 있습니까? 모니터링 목적으로 기간의 평균값이 필요합니다. 그래서 변수에 값을 할당해야합니다.
Sonique

@Sonique 그것은 kludge입니다. 왜냐하면 그것이 당신을 pv위해 만들어진 것이 아니기 때문에 awk물론 가능합니다. twilight stream --timeout 5Twitter spritzer에서 5 초 동안 샘플링 한 다음 종료 RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)"한 다음 echo $RATE"[40.8 / s]"( 's 는 더 이상 TTY가 아니므로 추가 --force플래그에 유의하십시오)와 같은 명령을 생성하는 명령을 가정 합니다 . pvstderr
chbrown

모든 프로그램에서 안정적으로 작동하지 않는 것 같습니다. 표시를 제거하면 > /dev/null출력이 "블록 청크"되어 더 이상 부드럽게 스트리밍되지 않습니다. 아마도 unbuffer일부 생산 프로그램에서 파이프 출력을 감지했을 때 출력 버퍼링을 차단하지 않도록 전환해야합니까?
nh2


1
watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"

나는 이것을 작동시킬 수 없었다. 구문이 확실합니까?
digidigo

어떤 오류가 발생합니까? 비밀번호를 묻지 않고 ~/.my.cnf실행 하도록 구성 했습니까 mysqladmin?
quanta
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.