특정 밀리초 미만의 핑을 필터링하려면 어떻게 해야 합니까? 즉, 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]은 주어진 목록의 첫 번째 요소를 반환합니다(목록에서 스칼라로 전환해야 함).