다음과 같이 명령 출력에 "나노초" 정밀도의 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
고쳐 쓰다
나노초 정밀도로 epoch를 사용하면 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
해결책이 있으면 알려주시기 바랍니다.
답변1
bc
다음 을 사용할 수 있습니다 printf
.
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
답변2
나노미터는 10 -9 이고 밀리미터는 10 -3 입니다 . 따라서 나노초의 처음 3자를 사용하여 밀리초를 얻을 수 있습니다.
date +%s%3N
에서 man date
:
%N 나노초(000000000..999999999)
%에스 1970-01-01 00:00:00 UTC 이후의 초 수
출처: 서버 장애bash를 사용하여 현재 Unix 시간을 밀리초 단위로 얻는 방법은 무엇입니까?. Stack Overflow의 동일한 질문에 동일한 답변을 게시했습니다.밀리초 단위로 시간을 가져오는 Linux 명령.
답변3
후크 몇 개만 더 추가하면 거의 맞다고 생각하셨을 겁니다
$ d=$(($(date +%s%N)/1000000))
$ echo $d
1445422618527
$ d=$(date +%s%N)
$ echo $d $(( d / 10 )) $(( d / 1000000 ))
1445422673712321597 144542267371232159 1445422673712