#!/bin/bash
ping -c 1 8.8.8.8 | awk '{print $7}'
date
따라서 위 코드의 경우 날짜와 시간을 다음 형식으로 표시하고 싶습니다.
Tue May 5 11:11:11 UTC 2020 time=0.838 ms
지금까지 이 출력을 인쇄합니다.
data.
time=1.24
packet
Tue May 5 23:31:33 UTC 2020
UTC 2020 옆에 시간=1.24를 원합니다.
답변1
ping -c 1 8.8.8.8 | awk -v date="$(date)" '$7 ~ /^time/{ print date, $7, $8 }'
이는 명령 대체의 출력을 date
awk 변수에 저장 date
하고 7번째 필드가 로 시작하는 경우에만 날짜와 7번째 및 8번째 필드를 인쇄합니다 time
.
답변2
지정된 대로 완료되면 이 메시지가 나타납니다.
echo -n "$(date) "
ping -c 1 8.8.8.8 | awk '$7 ~ /^time=/ {print $7}'
게시물에 상충되는 예제가 있으므로 단위 필드가 필요한지 여부가 완전히 명확하지 않습니다. 이렇게 하면 엔딩을 이렇게 바꾸세요print $7,$8
답변3
echo "$(date) time=$(ping -c 1 8.8.8.8 | awk '/transmitted/{print $NF}')"
$( .... ) 구문은 대괄호 안에 명령을 실행하고 여기에 출력을 삽입한다는 의미입니다.
ping 명령은 다른 제안을 따르지만 출력은 약간 다르게 필터링됩니다. 이는 단지 ping의 출력입니다...
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=22.9 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.919/22.919/22.919/0.000 ms
awk 명령은 /translated/와 일치하는 행을 검색한 다음 해당 행의 마지막 값(이 경우에는 시간 값)을 인쇄합니다. 줄의 단어 수는 "ping" 구현이나 출력 등에 따라 달라질 수 있으므로 항상 줄의 마지막 요소를 선택하기 위해 NF를 사용합니다.