Saída pings com tempo maior que 100ms para arquivo com timestamp anexado

0

Eu quero salvar em um arquivo cada ping com um tempo maior que 100 ms e anexar um registro de data e hora a cada linha.

Pesquisando consegui isso:

ping HOST | grep --line-buffered "time=[0-9][0-9][0-9]" | perl -nle 'print scalar(localtime), " ", $_' > outputFile

Primeiro tive problemas com o buffer do grep, resolvido com --line-buffered . Eu acho que algo semelhante está acontecendo com perl porque eu recebo uma saída no shell, mas nada no outputFile.

    
por BlueSialia 01.03.2016 / 22:34

2 respostas

0

perl buffers de saída por padrão, a menos que você diga que não, configurando $| aka $OUTPUT_AUTOFLUSH para um valor diferente de zero. Veja man perlvar e procure por AUTOFLUSH para detalhes.

Além disso, se você estiver usando o perl, também não precisará do grep.

tente algo assim:

ping HOST | perl -nle 'BEGIN { $|=1 } ;
    if (/time=\d\d\d/) { print scalar(localtime), " ", $_}' > outputFile

BTW, você também pode reescrever o script para que, em vez de canalizar a saída do ping para o perl, o perl abra um pipe do ping e faça um loop sobre a entrada desse. Por exemplo:

#! /usr/bin/perl 

# turn off output buffering
$|=1;

# get hostname to ping from command line or use default-hostname
$host=shift || 'default-hostname';

open(IN,'-|',"ping $host") || die "couldn't open pipe from ping: $!\n";
while(<IN>) {
  if (/time=\d\d\d/) { print scalar(localtime), " ", $_ };
};
close(IN);
    
por 01.03.2016 / 23:31
0

Sem perl:

ping -c 10 -D HOST | grep -E "time=[1-9][0-9]{2,}" >> output.txt
    
por 02.03.2016 / 00:01