아래에 제공된 스크립트를 실행 중입니다.
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
파이프라인의 모든 명령에 사용해 보세요 .