获取当前时间作为 awk 脚本中“date”的输出

获取当前时间作为 awk 脚本中“date”的输出

awk, 脚本中我使用命令

system(date)

打印文件中的当前日期,但执行此命令后,还会隐式添加下一行。有没有办法在awk不添加新行的情况下打印当前日期,以便我接下来打印的任何内容都在同一行中?

答案1

date命令在其输出末尾添加换行符。您可以将输出读入 awk 并使其打印,而无需附加换行符。

"date" | getline date; printf "%s", date

除非您的脚本长时间运行,否则您也可以获取启动脚本的日期。

awk -v date="$(date)" '
    … printf "%s", date …
'

答案2

GNUawk@托马斯迪基mawk实现awk有一些与时间和日期功能相关的扩展。有了这些,你就可以使用

strftime("%+", systime())

获取与date实用程序生成的格式相同的字符串表示形式。

或者,对于稍微不同的格式,但更便携(适用于非 BSD 系统),

strftime("%c", systime())

测试:

$ date
Mon Jan 28 11:22:22 CET 2019
$ gawk 'BEGIN { print strftime("%+", systime()) }'
Mon Jan 28 11:22:27 CET 2019
$ mawk 'BEGIN { print strftime("%+", systime()) }'
Mon Jan 28 11:22:33 CET 2019

如果%+您的系统不支持该格式(不在 中glibc2),那么%c可能会生成与此非常接近的格式。确切的格式将取决于strftime()C 库中的实现以及当前与日期时间相关的区域设置。在C/POSIX区域设置中,您将获得与上面相同的输出,但没有时区缩写。

BSDawk实现默认情况下可能没有这些功能。

也可以看看:

  • 系统上的awk和(用于时间/日期戳格式化)的手册。strftime

相关内容