Linux
在腳本中包括毫秒?
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
無論如何我可以在我的腳本中實現相同的功能嗎?
如果您使用兩個非攜帶式的東西是可能的:
- GNU awk 的雙向 I/O(參見相關的 StackOverflow 答案);
- 毫秒輸出
date
(請參閱此ServerFault 答案)。有了它,您可以在輸入前加上這樣的時間戳:
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'