다른 점프 호스트로 SSH를 통해 ping 통신을 수행하는 호스트의 ping 연결을 확인하고 있습니다. awk를 사용하여 성공적인 패킷 핑 횟수를 인쇄하고 싶습니다.
xajvtl001:/home/root #ssh -qn xckvl002"ping -w2 -c3 xcvtc012| grep packets"
3 packets transmitted, 3 packets received, 0% packet loss
수신된 패킷 수를 기준으로 예상되는 출력 값은 3입니다.
답변1
GNU grep이 있는 경우:grep -oP '\d+(?= packets received)'
"수신된 패킷" 뒤의 숫자를 찾으세요.
답변2
수신된 패킷 수를 찾고 있는 경우:
ssh -qn xckvl002 "ping -w2 -c3 xcvtc012 | awk '/packets transmitted,/ {print \$4}'"
원격 명령 주위에 큰따옴표를 사용하고 있으므로 내부 작은따옴표는 직접적인 인용 의미를 잃어버리므로 이와 같은 문자는 $
여전히 이스케이프되어야 합니다. 이것이 백슬래시가 에서 사용되는 이유입니다 print \$4
.
의 구현은 ping
다른 출력을 가질 수 있습니다. 내 경우에는 N packets received
그렇습니다 Received = N
. 검색 패턴(예제 에서는 awk
슬래시로 묶임 )이 요약 행을 올바르게 식별하는지 확인하는 것이 좋습니다. 또한 출력에 공백으로 구분된 필드 수가 다른 경우 필드 변수에 $4
4 이외의 숫자를 사용해야 할 수도 있습니다.
sed
편집: 관심 있는 사람을 위한 솔루션:
ssh -qn xckvl002 "ping -w2 -c3 xcvtc012 | sed -nr 's/.*([0-9]+)\s*received,.*/\1/p'"
답변3
다음 명령을 사용했습니다.
# ping -c3 hostname|awk '/received/{print $0}'| awk -F "," '{print $2}'|sed -r "s/^\s+//g"| awk '{print $1}`
출력은 다음과 같습니다
3