简体   繁体   English

想要使用 gawk bash 在控制台输出的时间戳中添加毫秒

[英]want to add milliseconds in time stamp of console output using gawk bash

I am using following snippet to add timestamp to console output我正在使用以下代码段将时间戳添加到控制台输出

command | gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'  

how to add milliseconds to it?如何添加毫秒?

Why not a simple bash solution?为什么不是简单的 bash 解决方案? You can read each line and prepend a timestamp using the date command, eg您可以使用date命令读取每一行并添加时间戳,例如

command | while read -r line; do printf "%s %s\n" "$(date +'%F %T.%03N')" "$line"; done

Example Use/Output示例使用/输出

Sample lines:示例行:

$ cat dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.

Timestamped output:时间戳输出:

$ cat dat/captnjack.txt | 
while read line; do printf "%s %s\n" "$(date +'%F %T.%03N')" "$line"; done
2022-06-24 00:45:28.030 This is a tale
2022-06-24 00:45:28.031 Of Captain Jack Sparrow
2022-06-24 00:45:28.033 A Pirate So Brave
2022-06-24 00:45:28.035 On the Seven Seas.

( note: thank you @jhnc for the GNU date %03N specifier) 注意:感谢@jhnc 提供 GNU date %03N说明符)

With bash you can also use process substitution to feed the timestamp loop, eg使用 bash,您还可以使用进程替换来提供时间戳循环,例如

while read -r line; do 
  printf "%s %s\n" "$(date +'%F %T.%03N')" "$line"
done < <(command)

回到最初的date想法:

 echo -ne "[$( date '+%Y-%m-%d %H:%M:%S,%3N')] "; command

@Rohit : unless I'm missing something from the gawk manual, I don't see it, unless you want to use the gawk extension time . @Rohit:除非我错过了gawk手册中的某些内容,否则我看不到它,除非您想使用gawk extension time Otherwise, this is how I get microsecs for my various awk s :否则,这就是我为各种awk获得microsecs的方式:

 {m,g}awk '{ OFMT="%.15f"

   print substr("",(__="gdate +\47%s.%N\47" \         # gnu-date
                    )|getline _,    close(__)) +_ }' 

   1656047978.467053890228271
  • It only has 53-bit of precision (or 52, depending on who you ask about the implied bit), so those extra decimal points are mere optical illusions

  • The "substr()" here neither outputs anything nor affect what's being returned. It's sole functionality is to act as a temporary staging area of sorts

| |

 ( I use substr() encapsulations as a generic way to 
   swap values between 2 variables w/o

     using a temp var, 
     an external function call, or 
     bit-wise XOR techniques (awk specs intentionally dont offer it)

   in a sense, it kinda gives a sorta similar,
   but certainly not identical,
   feel to more modern languages returning tuples)
  

That said, if you aren't constrained by gawk-only requirement , i'm aware of 1 variant of awk that offers millisec times without going external :也就是说,如果您不受gawk-only requirement限制,我知道awk的 1 个变体提供毫秒时间而无需外部:

 mawk2 '{ print substr("",srand(),srand()) srand() }'

 #srand1656049345.921576#

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM