unix awk는 문자열과 일치하고 구분을 수행합니다.

unix awk는 문자열과 일치하고 구분을 수행합니다.

다른 점프 호스트로 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슬래시로 묶임 )이 요약 행을 올바르게 식별하는지 확인하는 것이 좋습니다. 또한 출력에 공백으로 구분된 필드 수가 다른 경우 필드 변수에 $44 이외의 숫자를 사용해야 할 수도 있습니다.

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

관련 정보