我有一个日志文件,姑且称之为mylogfile.txtR系统调用AWK失败
格式是 日期戳,然后分号分隔符,然后一些其他的东西,我,为这项工作的目的,漠不关心。
例如,(这是在日志文件中的所有一行 - 不知道如何在SO表现为这样所以道歉)
20170710-23:59:43.158;[email protected]@[email protected]:15:[email protected]@2017071023:59:[email protected]@[email protected]:59:43.156#[email protected]@[email protected]:15:[email protected]@20170710-23:59:[email protected]@[email protected]:59:43.156#[email protected]@[email protected]:15:[email protected]@20170710-23:59:[email protected]@[email protected]:59:43.156#[email protected]@[email protected]:15:[email protected]@20170710-23:59:[email protected]@[email protected]:59:43.156#
什么我目前试图简单地说就是概念实例的证明。我希望解析文件,颠倒行顺序,并返回输出中的两列 -
1)只是从第一列解析的时间戳(这是一个日期时间格式,所以我需要放弃日期部分)
2)在自午夜秒表示即时间戳,表示以毫秒精度(符合时间戳本身的粒度。
从输出下面的单线例子是例如所以
23:59:43.158,86383.158
我c一半在那里。我可以使用在cygwin中完美运行的语法构造对awk的调用(自然地剥离了R包装)。不过,这并不R内
testawk<-paste0("tac ", mylogfile.txt, " | awk 'BEGIN {FS=\"-|;|:\"} {OMFT=\"%.3f\"} {print $2 \":\" $3 \":\" $4 \",\" (3600*$2)+(60*$3)+$4}' ")
getawk<-as.data.frame(system(testawk, intern=TRUE, show.output.on.console = FALSE))
工作,但是什么数据帧getawk结束仅仅是原始日志文件搅动通过,因为它是被读取。另外,我拿到运行命令有状态1.
警告邮件,但是
,如果我去掉了“TAC”一块,只使用直AWK,从而;
testawk<-paste0("awk 'BEGIN {FS=\"-|;|:\"} {OMFT=\"%.3f\"} {print $2 \":\" $3 \":\" $4 \",\" (3600*$2)+(60*$3)+$4}' ", mylogfile.txt)
getawk<-as.data.frame(system(testawk, intern=TRUE, show.output.on.console = FALSE))
我得到错误信息
Error in system(testawk, intern = TRUE, show.output.on.console = FALSE) : 'awk' not found
我不认为这个问题是在我的awk的建设,因为它工作正常,如果我只是做cygwin的范围内。所以很明显r/system/awk交互的一些方面我没有完全掌握。我想如果我把它全部包装在一个awk脚本中,并简单地调用它的脚本它可能工作,但我很沮丧,我不能简单地找到正确的语法来直接调用awk R系统命令(我处理grep,sed等命令等)。
这不像awk实际上根本不被支持那么简单吗?
指针非常感谢。如果第一个说20行的日志文件是有用的,我也可以发布这些。
为什么你想使用'awk'呢?你可以在没有太多痛苦的情况下做到这一点。 – nicola