사람이 읽을 수 있는 타임스탬프를 인쇄하기 위해 ping을 받으려면 어떻게 해야 합니까?

사람이 읽을 수 있는 타임스탬프를 인쇄하기 위해 ping을 받으려면 어떻게 해야 합니까?

Ping은 각 줄에 타임스탬프를 인쇄할 수 있지만 유닉스 날짜 형식입니다 :(

ping -D localhost  
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
[1415629479.482938] 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.057 ms

나는 즉시 다음과 같이 변환할 수 있는 간단한 파이프 명령을 찾고 있습니다.

[Sat 14 Feb 2009 01:31:30 SAST] 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.057 ms

또한 계속 실행되기를 원하며 결과를 인쇄하기 전에 명령이 종료될 때까지 기다리면 안 됩니다.

답변1

에서:https://stackoverflow.com/questions/14036116/convert-timestamp-to-datetime-with-sed

게다가 일부 스크립트...

ping -D localhost | while read row 
do 
  awk '{ sub(/[0-9]{10}/, strftime("%Y-%m-%d %H:%M:%S", substr($0,2,10))) }1' <<< "$row"
done

다음으로 실행

$ ping -D localhost | while read row; do awk '{ sub(/[0-9]{10}/, strftime("%Y-%m-%d %H:%M:%S", substr($0,2,10))) }1' <<< "$row" ; done
PING localhost (127.0.0.1) 56(84) bytes of data.
[2014-11-10 16:06:40.145811] 64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.045 ms
[2014-11-10 16:06:41.144926] 64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.040 ms

답변2

-D대부분의 답변에서 알 수 있듯이 제공된 UNIX 타임스탬프를 수정하는 것은 너무 복잡하다고 생각합니다. 자신만의 타임스탬프를 만들어 각 줄 앞에 붙여넣으면 어떨까요?

ping localhost | while read l; do echo `date` $l; done

date필요에 따라 서식 옵션을 제공할 수 있습니다.

답변3

ping google.com | awk '/^[0-9]+ bytes from / { "date" | getline pong; close("date"); print pong":",$0; }'

이것은에서 비롯됩니다http://tech.jocke.no/2010/09/27/add-timestamp-to-ping/

효과도 아주 좋아요!

답변4

이것은 macOS에서 작동합니다.

ping -i 5 google.com | while read pong; do echo "$(date -j '+%Y-%m-%d %H:%M:%S') $pong"; done

여기에 제공된 명령을 적용했습니다.http://shawnreeves.net/wiki/index.php?title=Ping_with_timestamp_on_Mac_OS_X

출력은 다음과 같습니다.

2021-10-10 13:23:21 PING google.com (142.250.80.14): 56 data bytes
2021-10-10 13:23:21 64 bytes from 142.250.80.14: icmp_seq=0 ttl=115 time=83.045 ms
2021-10-10 13:23:26 64 bytes from 142.250.80.14: icmp_seq=1 ttl=115 time=39.765 ms

관련 정보