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);