我正在编写一段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)
之间的“空格”中进行编码,但是每次遇到错误时,都如此。
任何人都可以建议最好的方法吗?
答案 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问题。