100ミリ秒を超えるpingをファイルに出力し、タイムスタンプを追加します。

100ミリ秒を超えるpingをファイルに出力し、タイムスタンプを追加します。

100ミリ秒より長い時間のすべてのpingをファイルに保存し、各行にタイムスタンプを追加したいと思います。

検索してみると次のような内容が得られました。

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

まず、--line-buffered

答え1

パールなし:

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

答え2

perl$|akaをゼロ以外の値に設定して$OUTPUT_AUTOFLUSHそれを行わないように指示しない限り、出力はデフォルトでバッファリングされます。詳細についてはman perlvarAUTOFLUSHを参照して検索してください。

また、Perlを使用している場合はgrepも必要ありません。

次のようにしてみてください。

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

ちなみに、pingの出力をPerlにパイプするのではなく、Perlがpingでパイプを開き、そのパイプの入力を繰り返すようにスクリプトを書き換えることもできます。たとえば、

#! /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);

関連情報