我有一个文件(名为 2n.log),我希望将第一列中的人类可读日期和时间转换为 unix 时间:
2016-03-14 15:00:35,998191
2016-03-14 15:02:19,998181
在命令行上,如果我使用 date 命令,我会得到正确的 unix 时间戳,例如
user@server1:~# date -d "2016-03-14 15:02:19" "+%s"
1457967739
但是,如果我在 awk 中输入相同的命令,我会得到错误的 unix 时间戳值,这是我使用的 bash 脚本(名为 2n.sh:
#!/bin/env bash grep ".*2016" 2n.log | awk -F ',' -v dt="$(date -d "$1" "+%s")" '{print dt","$2}'
这是输出:
user@server1:~# sh 2n.sh
1457913600,998191
1457913600,998181`
是 grep 通配符的问题还是 awk 声明的问题?我尝试用 grep 通配符替换“2016.*”,但根本没有得到任何输出。
谢谢
最佳答案
您不是从第一个字段计算日期,此时 shell 仍然负责。你可以这样做
$ awk -F, '{cmd="date -d \""$1"\" +%s"; cmd | getline date; print date, $2}' logfile
1457982035 998191
1457982139 998181
为逗号分隔输出添加 -v OFS=,
。
关于linux - 使用 grep 和 awk 将文件的第一列转换为 unixtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991602/