首页 > 解决方案 > 如何在awk中处理时间函数

问题描述

有档案test.txt

ABCDEF 2019-09-16 02:45:49
ABCDEF 2019-09-16 02:26:27
ABCDEF 2019-09-16 02:15:23

需要与 Unix 时间一样的答案:

ABCDEF 1568583949
ABCDEF 1568582787
ABCDEF 1568582123

我正在使用这个 AWK 代码。

cat test.txt|sed 's/[-:]/ /g'|awk '{print $1, mktime("$2,$3,$4,$5,$6,$7")}'

但我得到了错误的答案。我该如何解决?

ABCDEF -1
ABCDEF -1
ABCDEF -1

标签: awk

解决方案


gsub()在包含第二列和第三列的组合记录上做一个单一的记录会很容易,如下所示。由于 的第一个参数gsub()采用正则表达式参数,因此您可以同时提供定界字符并坚持将它们替换为单个空格(默认值为FS)。

awk '{ var = ($2 FS $3); gsub(/[-:]/, FS, var); print $1, mktime(var) }' test.txt

推荐阅读