首页 > 解决方案 > 使用hadoop命令提取时间戳时如何分开小时和日期

问题描述

我需要使用 hadoop 命令提取文件的 timestimps:

hadoop fs -ls /hdfs/data/adhoc//InterfacePublique-Controle-PUB_1EPSE-201808-PR-20190110-183844-indicateurs-PUB_1EPSE/* | awk '{timestamp= $6 " " $7;print timestamp}' 

它的作用是给予

"2019-01-10 18:55"

但是当我使用这样的系统函数删除$6 $7之间的引号时

x <- "/hdfs/data/adhoc//InterfacePublique-Controle-PUB_1EPSE-201808-PR-20190110-183844-indicateurs-PUB_1EPSE/*"

system(paste0("hadoop fs -ls ",x," | awk '{timestamp= $6  $7;print timestamp}' "),intern =TRUE)

返回:

2019-01-1018:55。第 18 小时和第 10 天结束。

然后,如果我在 hadoop 表达式中添加引号。

system(paste0("hadoop fs -ls ",x," | awk '{timestamp= $6 " " $7;print timestamp}' "),intern =TRUE)

它给出了一个错误说

意外令牌 $7;打印时间戳

请问我该如何解决?

标签: rregexdatetime

解决方案


stringr您可以使用and提取时间戳lubridate

x <- "/hdfs/data/adhoc//InterfacePublique-Controle-PUB_1EPSE-201808-PR-20190110-183844-indicateurs-PUB_1EPSE/*"

library(lubridate)
library(stringr)

ymd_hms(
  str_extract(x, "(\\d{8}-\\d{6})")
)

[1] "2019-01-10 18:38:44 UTC"

推荐阅读