如何快速在 awk 命令中执行日期函数?

How to execute a date function inside an awk command in an fast way?

我正在使用 awk 读取文件并解析日期并将其转换为秒数。我写了一个实现此目的的工作代码,但它运行速度相对较慢,而且我有大量日志文件需要阅读。我需要知道是否有另一种方法可以在更短的时间内实现这一目标。这是我的代码:

awk '
 {
  currentDateTime= " " 
  seconds ="date \"+%s\" -d \""currentDateTime" \""
  print "The time in seconds is: [ " seconds "]"
  seconds | getline result
  print result 
 }'  out.log

这是输出:

The time in seconds is: [ date "+%s" -d "2014-04-01 10:20:22,357 "]
1396336822

请注意,在第一个输出中,变量 currentDateTime 作为命令而不是值输出。我想知道我是否可以在不使用 getline 的情况下执行此命令,因为在较大的文件上尝试时 getline 似乎很慢。

getline 慢的原因是在这种情况下你是 运行 一个 shell 命令。

这就是慢。

您正在为每个条目生成一个新的 shell 和 运行 date

停止这样做。

如果您使用的是 GNU awk,请使用 GNU awk mktime 函数。