2014-02-07 3 views
-1

현재 atm의 평균 핑 시간을 기록하는 bash 스크립트를 작성하려고합니다. 세 가지 다른 목표, 하루 종일 20 초마다. 이 Bash 평균 ping 시간을 하루에 20 초마다 기록하는 스크립트

  • 방법/단지 대상과 평균 시간을 절약 할 수있는 핑 요약을 awk가 나오지하기 위해 ... .. 내가 현재 가지고있는 내 질문에 이제

    #!/bin/bash 
    
    echo "SCRIPT STARTED" >> pingthing.log 
    date +%d.%m.%y' '%R:%S >> pingthing.log 
    
    for i in $(seq 1 4320); 
    do 
        date +%d.%m.%y' '%R:%S >> pingthing.log 
        #save just target IP and avg time. 
        ping -c 3 -q -W 2 8.8.8.8 >> pingthing.log 
        ping -c 3 -q -W 2 64.25.40.16 >> pingthing.log 
        ping -c 3 -q -W 2 96.17.199.48 >> pingthing.log 
        sleep 20 
    done 
    
    echo "SCRIPT ENDED" >> pingthing.log 
    date +%d.%m.%y' '%R:%S >> pingthing.log 
    

    입니까?

  • 어떻게 100 % 손실 사례를 처리 할 수 ​​있습니까?

편집 : 죄송합니다, 나는 SED/AWK와 아무 경험이 있지만, 이러한 도구와 함께 할 수 있다는 것을 알고 .. 내가이 현재 내 로그 파일에 무엇을 자신

를 저장한다 명확히 해보자. 아직 이것 만이 시작되었습니다.

SCRIPT STARTED 
07.02.14 22:14:13 
07.02.14 22:14:13 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 

--- 8.8.8.8 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2000ms 
rtt min/avg/max/mdev = 127.773/152.321/192.204/28.452 ms 
PING 64.25.40.16 (64.25.40.16) 56(84) bytes of data. 

--- 64.25.40.16 ping statistics --- 
3 packets transmitted, 3 received, +2 duplicates, 0% packet loss, time 2003ms 
rtt min/avg/max/mdev = 213.889/237.182/286.825/26.656 ms 
PING 96.17.199.48 (96.17.199.48) 56(84) bytes of data. 

--- 96.17.199.48 ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1001ms 
rtt min/avg/max/mdev = 305.028/340.081/375.135/35.058 ms 

이제 타겟과 그 평균을 갖고 싶습니다.

SCRIPT STARTED 
07.02.14 22:14:13 
07.02.14 22:14:13 
8.8.8.8 152.321 
64.25.40.16 237.182 
96.17.199.48 340.081 

같은 ping 명령의 시간을 나는 알고 있어요 그 그래야 파이프 SED/AWK에 ping 명령하지만 난 당분간 그것을 왼쪽이 가진 경험이 없기 때문에.

나는 당신이 모든 것을 해결하기를 바라지 않을 것입니다. 저는 여기서 토론하고 배울 것입니다. 100 % 손실 문제 .. 출력이

핑과 같을 것이다 들어 -W 2 -q -c 3 1.1.1.1

PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 

--- 1.1.1.1 ping statistics --- 
3 packets transmitted, 0 received, 100% packet loss, time 2016ms 

지금 여기에 성공과 사람과 같이 더 요약 라인은 없다 핑, 그래서 .. 그 패턴 SED/AWK를 사용할 수 없습니다

+2

:

여기가 주석 한 번에 하나 개의 라인은 무엇입니까? 어떻게 실패 했습니까? awk에 대해 배웠던 점은 무엇입니까? 우리는 "자유로운 모든 문제를 해결하는"것이 아닙니다. –

+2

sed 또는 awk 스크립트가 필요한 경우, 최소한 스크립트의 샘플 입력 및 예상 출력을 제공해야합니다. 예를 들어'ping -c 3 -q -W 2 '의 출력을 파싱하려면'ping -c 3 -q -W 2 '의 샘플 출력을 샘플로 게시해야합니다 입력을 sed 또는 awk 스크립트에 입력 한 다음 sed 또는 awk 스크립트가 해당 샘플 입력에서 생성 할 출력을 게시해야합니다. –

+0

질문에 대한 답변을 드릴 필요가 없습니다. 이미 사용자 이름을 볼 수 있습니다. – Nit

답변

1

을 감안하여 게시 샘플 입력 파일 :

$ awk -F'[ /]' 'NR~/^[123]$/; /^---/{ip=$2} /^rtt/{print ip, $8}' file 
SCRIPT STARTED 
07.02.14 22:14:13 
07.02.14 22:14:13 
8.8.8.8 152.321 
64.25.40.16 237.182 
96.17.199.48 340.081 

당신은 "100 % 손실을 당신이 원하는 출력 말해주지 않는다 prob 흠 "그래서 당신이 그걸로 끝내고 싶은지 모르겠다. 지금까지 명확하지 않은 몇 가지 특별한 이유가 없으면 샘플 입력과 예상 출력에이를 포함 시키십시오. 당신이 출력 될 요구 사항을 알려 ...

awk -F'[ /]' 'NR~/^[123]$/; /^---/{ip=$2} /^rtt/{print ip, $8} /100% packet loss/{print ip, "100% packet loss"}' file 

가능성은 무한합니다 : 당신이 원하는 모든 100 %의 손실을 나타 인쇄 뭔가 경우

, 당신은 단지에 스크립트를 조정할 수 있습니다. 아직 시도 무엇

awk -F'[ /]' '  # use space and/as the field separator 
NR~/^[123]$/;  # if youre on input line 1, 2, or 3, print that line (the default action) 
/^---/{ip=$2}  # if the line starts with 3 dashes, save the 2nd field as the IP address 
/^rtt/{print ip, $8} # if the line starts with rtt, print the saved IP address and the 8th field which is the averages 
/100% packet loss/{print ip, 2000} # if the line contains the 100%... statement, print the IP address and a default value of 2000 
' file 
+1

awk 명령이 단계별로 수행하는 작업을 이해하려고합니다. 나는 100 % 손실 사건에 대한 해결책을 가지고 있지 않았다. 왜냐하면 지금은 단지 2000ms의 평균 시간을 저장하기 때문이다. – apoc

+0

각 조건 + 동작이 주석이있는 별도의 줄에있는 버전을 추가하여 이해하기 쉽습니다. 나는 또한 2000 년 인쇄를 위해 100 % 손실 케이스 인쇄본을 변경했습니다. –

+1

완벽한, 광범위한 답변을 주셔서 대단히 감사합니다! – apoc

관련 문제