핑 결과를 시간별로 필터링하는 방법은 무엇입니까?

핑 결과를 시간별로 필터링하는 방법은 무엇입니까?

특정 밀리초 미만의 핑을 필터링하려면 어떻게 해야 합니까? 즉, 500밀리초보다 오래된 핑 응답만 텍스트 파일에 에코하도록 할 수 있습니까?

IP=$1
SECONDS_Between_Pings=$2

ping -i $2 $1 | while read pong; do echo $(date) $pong; done >> ~/Downloads/pings_file_$(date +%Y-%m-%d).txt

답변1

grep확장된 정규식을 사용하십시오:

ping ... | grep --line-buffered -E 'time=([0-9]{4}|[5-9][0-9]{2})' | ...

이는 바로 다음 줄과 일치합니다 time=.

  • 4자리 숫자(1000+밀리초).
  • 5~9의 한 자리 숫자 뒤에 임의의 두 자리 숫자(500~999ms)가 옵니다.

--line-buffered해결하다grep기본 출력 버퍼링으로 인한 문제파이프라인 체인에 사용되는 경우. grep이 파이프라인 체인의 마지막 링크인 경우에는 필요하지 않습니다.

답변2

펄 솔루션:

ping -i "$2" "$1" | while read pong; do echo $(date) "$pong" ; done \
  | perl -ne 'print if (/time=([0-9.]+)/)[0] > .5' >> ~/Downloads/...

설명: - ([0-9.]+)다음 십진수를 일치시키고 time=기억하세요. - (...)[0]은 주어진 목록의 첫 번째 요소를 반환합니다(목록에서 스칼라로 전환해야 함).

관련 정보