在awk中使用date命令命令时出现问题

时间:2020-02-07 13:37:29

标签: date awk

我正在编写一段awk代码,它读取以下格式的日志文件:

[03/02/2020 10:01:01]   SOME DATA
[03/02/2020 10:05:25]   SOME MORE DATA
[03/02/2020 11:54:38]   AND YET SOME DATA

我希望通过组合字段$1$2中的数据并在它们之间包含一个空格以满足bash date命令所需的输入格式来确定时代时间戳记。 / p>

这是我编写的代码部分:

cmd="date -d" substr($1,2,10) substr($2,1,8) " +%s"
cmd | getline this_date
print this_date

此刻,当我运行脚本时,出现此错误...

date: invalid date ‘03/02/202010:01:01’
date: invalid date ‘03/02/202010:05:25’
date: invalid date ‘03/02/202011:54:38’

所以在我看来,我已经快到了,但正如预期的那样,date命令希望在日期和时间部分之间留一个空格。

在上面的第一行代码中,我尝试了多种方法尝试在substr($1,2,10) substr($2,1,8)之间的“空格”中进行编码,但是每次遇到错误时,都如此。

任何人都可以建议最好的方法吗?

1 个答案:

答案 0 :(得分:2)

您提取的两个substr之间缺少空格;并且您需要添加引号以将它们连接为单个字符串。

cmd="date -d \"" substr($1,2,10) " " substr($2,1,8) "\" +%s"

如果您可以使用单引号而不是双引号,则可以简化一些事情;但是Awk脚本经常在单引号之间传递,因此我假设您在这里更喜欢双引号。

只需说明一下,正在运行的命令就是

date -d "03/02/2020 10:01:01" +%s

变成了

date
-d
03/02/2020 10:01:01
+%s

shell完成解析之后。引号对于将-d选项的参数保留为单个字符串是必需的,即使它包含空格。因此,这实际上是一个外壳问题,而不是Awk问题。