Bash
Unix 紀元(以毫秒為單位)
我將具有“納秒”精度的 Unix 紀元添加到我的命令輸出中,如下所示:
$ command | while read line; do d=`date +%s%N`; echo $d $line; done > file
我環顧四周,想知道如何將“納秒”變成“毫秒”。例如,我遵循了此處給出的解決方案。所以,我嘗試了兩種建議的方法:
$ command | while read line; do d=`echo $(($(date +%s%N)/1000000))`; echo $d $line; done > file $ command | while read line; do d=`date +%s%N | cut -b1-13`; echo $d $line; done > file
但是,在這兩種情況下,當我將文件插入 InfluxDB 並查詢我的數據庫時,我都會得到:
time 1970-01-01T00:24:05.419982325Z 1970-01-01T00:24:05.419982344Z 1970-01-01T00:24:05.419982371Z 1970-01-01T00:24:05.419982378Z 1970-01-01T00:24:05.419982388Z 1970-01-01T00:24:05.419982401Z
更新
當我使用具有納秒精度的紀元時
date +%s%N
,我得到了這個:time 2015-10-21T08:59:59.978902683Z 2015-10-21T08:59:59.982615836Z 2015-10-21T08:59:59.983958069Z 2015-10-21T08:59:59.98805317Z 2015-10-21T08:59:59.99717678Z 2015-10-21T09:00:00.028624495Z
我期待這樣的輸出:
2015-10-21T09:12:10.001327Z
如果您有任何解決方案,請告訴我。
你可以使用
bc
andprintf
:printf "%0.f" "$(bc <<<"$(date +"%s.%N")*1000")"
這給出了自 1970 年 1 月以來的毫秒數。我沒有故意使用
scale=n
選項bc
,因為這不會對值進行四捨五入,而是會減少其餘部分(我知道,這很迂腐)。bc 從文件或標準輸入中讀取。<<<
是一個此處的字元串,它擴展內容並將它們作為標準輸入提供給bc
. 這是printf
為了舍入該值。看這個例子:
$ d=$(date "+%s.%N") $ echo $d; bc <<<"scale=0; ($d*1000)/1"; printf "%0.f" "$(bc <<<"$d*1000")" 1445423229.512731661 # plain date 1445423229512 # bc with scale 1445423229513 # bc/printf
在循環中,它看起來像這樣:
command | while read line; do d=$(printf "%0.f" "$(bc <<<"$(date +"%s.%N")*1000")") echo "$d $line" done >file