С gnu date я считаю, что это будет:
$ a=1586775709496
$ LC_ALL=C date -u --date=@"$((a/1000)).$(printf "%03d" $((a%1000)))" +"%A, %B %2d, %Y %H:%M:%S.%3N %p"
Monday, April 13, 2020 11:01:49.496 PM
%3N
- это то, что поддерживает дата GNU и печатает только миллисекунды.
Я думаю, потому что последние 3 символа входные данные просто находятся на выходе, вы можете просто ввести их, где они должны быть, устраняя необходимость в %N
расширение:
$ a=1586775709496;
$ LC_ALL=C date -u --date=@"$((a/1000))" +"%A, %B %2d, %Y %H:%M:%S.$(printf "%03d" $((a%1000))) %p"