date - 在 awk 中使用 date 命令的问题
问题描述
我正在编写一段 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
在它们之间包含一个空格来满足 bashdate
命令所需的输入格式来确定纪元时间戳。
这是我编写的代码部分:
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)
在上面的第一行代码之间编写一个“空格”,但每次我都遇到错误。
谁能建议最好的方法?
解决方案
substr
您在提取的两个 s 之间缺少空格;并且您需要添加引号以将它们连接成单个字符串。
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
为单个字符串是必要的,即使它包含空格。因此,这实际上更像是一个 shell 问题,而不是 Awk 问题。
推荐阅读
- python - 封装的概念在 Python 中是如何工作的?
- python - 使用 Python API Client for Grakn 加载数据时出现问题
- arrays - 将 int 分配给结构数组但打印为 0(不同)
- python - 迭代不同长度的df并导出到csv
- excel - 尝试在工作表中查找匹配项时出现运行时错误“91”VBA
- sql - 如何在 SQL 日期类型列中插入日期?
- javascript - 如何在 datepicker 下拉列表中增加 120 天?
- python-3.x - 有没有办法从芹菜任务中获取触发时间?
- algorithm - 3 近似算法(随机或确定)
- terraform - Terraform 属性“子网”的值不合适:元素 0:需要字符串