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
これは、ポータブルではない2つのデバイスを使用している場合に可能です。
- 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'