如何快速在 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
函数。
我正在使用 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
函数。