100밀리초보다 큰 핑을 파일로 출력하고 타임스탬프를 추가합니다.

100밀리초보다 큰 핑을 파일로 출력하고 타임스탬프를 추가합니다.

100밀리초보다 긴 시간의 모든 핑을 파일에 저장하고 각 줄에 타임스탬프를 추가하고 싶습니다.

검색해 보니 다음과 같은 내용을 얻을 수 있었습니다.

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를 0이 아닌 값으로 설정하여 $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);

관련 정보