我尝试使用 awk 将时间戳字符串转换为 unix 纪元时间,但多次尝试后失败。
$ echo "2024-04-16 16:32:38.108580" | awk '{ epoch = mktime(gensub(/[:-]/, " ", "g", $1)) + substr($1, index($1, ".")+1) ; print epoch }'
2023
我尝试使用 awk 将时间戳字符串转换为 unix 纪元时间,但多次尝试后失败。
$ echo "2024-04-16 16:32:38.108580" | awk '{ epoch = mktime(gensub(/[:-]/, " ", "g", $1)) + substr($1, index($1, ".")+1) ; print epoch }'
2023
您正在操作,
$1
但应该在 上操作$0
。如果您检查过命令的中间步骤,您就会看到这一点。您还遇到了差一错误。这应该有效:
事实上,即使保留了分数,也只需更改
$0
并$1
修复原始作品中的差一错误,但我不知道这种行为是否得到保证:mktime()
正在寻找格式的输入YYYY MM DD HH MM SS
,所以在这种情况下我们想要:我们可以通过几种方式做到这一点:
由于我没有指定字段或变量来对整行(即
$0
)进行操作的函数进行操作。OP 的代码仅对第一个空格分隔字段 (
$1
) 执行操作,在本例中为2024-04-16
。OP 将需要指定前 2 个字段 ($1 " " $2
) 或整行($0
- 如果未指定字段则默认行为)。由于示例输入只有 2 个空格分隔的字段,因此我们将坚持处理整行 (
$0
)。将这些更改放入新
awk
脚本中:.108580
如果我们需要在末尾追加 ,我们可以重复使用 OP 的substr( index() )
代码,只要我们记得对整行进行操作($0
):