sudo hexdump -v -e '1/1 "%02x\n"' /dev/ttyUSB0 | awk '$1=="ed" {
getline byte1
getline byte2
number = strtonum("0x" substr(byte2,2,1))+2
data =" ::ED." byte1"."byte2
while(number-->0)
{getline byte; data = data"."byte}
print data"."
}' | tr '[a-z]' '[A-Z]'| grep -v '^.....00'
저는 이 작은 스크립트를 실행하고 있으며 모든 행에 대한 정적 값이 아닌 밀리초 단위로 각 행에 타임스탬프(실시간 값이어야 함)를 추가하려고 합니다. 나는 다음과 같은 결과를 기대하고 있습니다.
::144146::ED.data
::144146::ED.data
::144146::ED.data
각 행마다 144146이 아닌 밀리초 값을 얻어야 하고 값도 달라야 합니다. 내가 찾고 있는 작업을 수행하는 Python 스크립트가 있습니다.
수입시기
def timestamp():
now = time.time()
localtime = time.localtime(now)
milliseconds = '%03d' % int((now - int(now)) * 1000)
return time.strftime('%Y%m%d%H%M%S', localtime) + milliseconds
value = timestamp()
print value
어쨌든 내 스크립트에서 동일한 기능을 얻을 수 있습니까?
답변1
이는 휴대용이 아닌 장치 두 개를 사용하는 경우 가능합니다.
- GNU awk의 양방향 I/O(참조관련 StackOverflow 답변);
- 밀리초 출력
date
(참조서버 문제 해결).
이 방법을 사용하면 다음과 같이 타임스탬프를 입력에 접두사로 추가할 수 있습니다.
awk '{"date +%Y%m%d%H%M%S%3N" |& getline timestamp;
print timestamp,$0;
close("date +%Y%m%d%H%M%S%3N")}'
(이는 close
필수 사항이며 거기에 있는 문자열은 1행에서 실행한 명령과 일치해야 합니다. 자세한 내용은 위의 SO 답변을 참조하세요.)
이것을 프로그램에 통합하면 다음을 얻을 수 있습니다.
sudo hexdump -v -e '1/1 "%02x\n"' /dev/ttyUSB0 | awk '$1=="ed" {
getline byte1
getline byte2
number = strtonum("0x" substr(byte2,2,1))+2
"date +%Y%m%d%H%M%S%3N" |& getline timestamp;
data = timestamp " ::ED." byte1"."byte2
close("date +%Y%m%d%H%M%S%3N")
while(number-->0)
{getline byte; data = data"."byte}
print data"."
}' | tr '[a-z]' '[A-Z]'| grep -v '^.....00'