>source

Google과 같은 웹 사이트에 대해 4 ICMP 에코/에코 의존 패킷 (ms)에 대한 평균 왕복 시간을 에코하려고합니다. 이것은 지금 내 코드입니다.

echo "$(ping -c 4 google.com | grep '??????')"

웹 사이트를 핑하는 것은 작동하지만 평균 왕복 시간 만 표시하는 방법을 모릅니다. 웹 양식의 유효성 검사를 위해 Regex 만 사용했지만 한동안 사용하지 않았습니다. Regex를 사용하여 검색중인 항목 만 찾을 수 있다고 가정하지만 더 나은 방법이 있다면 그것도 좋을 것입니다. Linux 우분투 용 쉘 스크립팅을 사용하여 이것을 작성하고 있습니다.

이것은 출력의 예입니다. 내가 필요한 유일한 부분은 하단에있는 부분입니다. rtt min/avg/max/mdev = 14.556/14.579/14.614/0.088 ms .

PING google.com (142.250.74.238) 56(84) bytes of data.
64 bytes from par10s40-in-f14.1e100.net (142.250.74.238): icmp_seq=1 ttl=108 tim                                                                                                                                                                             e=14.5 ms
64 bytes from par10s40-in-f14.1e100.net (142.250.74.238): icmp_seq=2 ttl=108 tim                                                                                                                                                                             e=14.5 ms
64 bytes from par10s40-in-f14.1e100.net (142.250.74.238): icmp_seq=3 ttl=108 time=14.5 ms
64 bytes from par10s40-in-f14.1e100.net (142.250.74.238): icmp_seq=4 ttl=108 time=14.6 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 14.556/14.579/14.614/0.088 ms

  • 답변 # 1

    가정 ping 출력은 다음과 같습니다.

    $ ping -c 4 google.com
    PING google.com (172.217.14.238): 56 data bytes
    64 bytes from 172.217.14.238: icmp_seq=0 ttl=118 time=78.019 ms
    64 bytes from 172.217.14.238: icmp_seq=1 ttl=118 time=62.416 ms
    64 bytes from 172.217.14.238: icmp_seq=2 ttl=118 time=63.019 ms
    64 bytes from 172.217.14.238: icmp_seq=3 ttl=118 time=62.415 ms
    --- google.com ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 62.415/66.467/78.019/6.674 ms
    
    

    이 시나리오에서 평균 시간은 66.467 (ms)

    하나 awk 해결책:

    awk '/avg/ {split($0,arr,"/"); print arr[5]}'
    
    

    어디:

    /avg/ -문자열이있는 줄 찾기 avg

    split($0,arr,"/") -슬래시 ( / ) 구분 기호로 세그먼트를 arr[] 정렬

    print arr[5] -5 번째 요소를 인쇄합니다. arr[] 정렬

    와 결합 ping :

    ping -c 4 google.com | awk '/avg/ {split($0,arr,"/"); print arr[5]}'
    66.467
    
    

    시간 측정을 포함해야하는 경우 ( ms 이 경우), 우리는 또한 문자열을 포함하는 줄의 마지막 필드를 인쇄 할 수 있습니다 avg , 예 :

    ping -c 4 google.com | awk '/avg/ {split($0,arr,"/"); print arr[5],$NF}'
    66.467 ms
    
    

    메모:

    OP는 awk 그들의 명령 ping 출력이 다른 형식입니다.

    분명히 (?) 핑이 실행될 때마다 약간 다른 값을 얻을 수 있습니다.

    OP가 가치를 100 % 확신하고 싶다면 ping 명령 출력은 파일 (또는 변수)에 저장 한 다음 awk 해당 파일 (또는 변수)에 대한 명령

관련 자료

  • 이전 c - 암시 적 함수 변환은 int 매개 변수에 대한 이중 인수를위한 것입니다
  • 다음 C로 캐스팅하는 함수 포인터