Como você pode fazer ping para imprimir timestamps legíveis para humanos?

2

O Ping pode imprimir um timestamp em todas as linhas, mas em formato de data unix: (

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

Estou procurando um comando de pipe simples que possa convertê-los rapidamente para algo assim:

[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

Além disso, eu quero que ele seja executado continuamente, ele não deve esperar que o comando termine antes de imprimir os resultados.

    
por AmanicA 10.11.2014 / 15:28

3 respostas

3

De: link

com pouco script ...

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

é executado como

$ 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
    
por 10.11.2014 / 17:10
1
ping google.com | awk '/^[0-9]+ bytes from / { "date" | getline pong; close("date"); print pong":",$0; }'

Isso vem do link

Funcionou bem também!

    
por 09.10.2015 / 19:39
0

Em outro servidor eu estava recebendo

awk: line 2: function strftime never defined

e não há uma maneira fácil de instalar o gawk, então descobri como fazer isso sem awk , apenas com date (de acordo com a dica do @Hrvoje Špoljar)

ping -D  localhost | while read row; do 
    if [[ $row == \[*\]* ]]; then 
        echo -n \[$(date -d "@$(echo $row| sed 's/^\[//' | sed 's/\].*//')")\] ;
    fi ; 
    echo $row | sed 's/\[.*\]//' <<< "$row"; 
done

que produz

[Tue Apr 14 12:58:51 SAST 2015] 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.040 ms
    
por 14.04.2015 / 13:04