Hexdump로 타임스탬프를 바인딩합니까?

Hexdump로 타임스탬프를 바인딩합니까?

아래에 제공된 스크립트를 실행 중입니다.

sudo  hexdump -v -e '1/1 "%02x\n"' /dev/ttyUSB0  | Many Pipes | gawk '{ print strftime(":: %s"), $0 }'

여기에 있는 데이터는 아래와 같이 타임스탬프가 지정된 16진수 덤프입니다.

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680719 ::ED.DATA

보시다시피 모든 패킷의 시간은 변경되지 않습니다. 행을 읽는 대신 데이터를 덤프하기 때문이라고 생각합니다. 이것을 스크립트로 작성하고 각 패킷에 대해 다른 값(초 단위)을 얻을 수 있는 방법이 있습니까?

답변1

같은 시간은 버퍼링에서도 발생합니다. 대기열에 버퍼링된 명령을 찾아 해당 명령을 시도해 보십시오.unbuffer.

답변2

stdbuf -oL나는 jessie pi에서 다음을 시도했고 hexdump 전면은 문제 없이 예상대로 작동했습니다.

while sleep .5;do echo -n x;done |
stdbuf -oL hexdump -v -e '1/1 "%02x\n"' |
ts %.s |
cat

이는 while느린 입력을 시뮬레이션하고, ts각 줄에 타임스탬프를 추가하고, cat또 다른 파이프를 제공하기 위한 것입니다. 출력은 규칙적이며 처음 두 줄 이후의 타임스탬프는 약 0.5초 정도 다릅니다. 이 명령은 패키지 ts에서 제공됩니다 .moreutils

stdbuf -oL파이프라인의 모든 명령에 사용해 보세요 .

관련 정보