Você pode usar bc
e printf
:
printf "%0.f" "$(bc <<<"$(date +"%s.%N")*1000")"
Isso dá o número de milissegundos desde janeiro de 1970. Eu não usei a opção scale=n
de bc
de propósito, porque isso não arredondaria o valor, em vez disso, ele corta o resto (eu sei, é pedante ). bc lê do arquivo ou da entrada padrão. <<<
é uma string que expande o conteúdo e os fornece como entrada padrão para bc
. Isso é dado a printf
para arredondar o valor.
Veja isso como um exemplo:
$ 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
No loop, ficaria assim:
command | while read line; do
d=$(printf "%0.f" "$(bc <<<"$(date +"%s.%N")*1000")")
echo "$d $line"
done >file