对awk的R系统调用失败
我有一个日志文件,我们叫它mylogfile.txt 格式是 日期时间戳,然后是分号分隔符,然后是其他一些我不关心的东西,就本练习而言 例如(这是日志文件中的全部一行-不确定如何在道歉中这样表示) 我目前尝试的只是一个概念验证示例。我希望解析文件,颠倒行顺序,并在输出中返回两列- 1) 只是从第1列解析的时间戳(这是一种日期时间格式,因此我需要放弃日期部分) 2) 从午夜开始以秒表示的时间戳,以毫秒精度表示(和时间戳本身的粒度一致) 因此,从下面的单线示例中,输出为eg对awk的R系统调用失败,r,bash,awk,R,Bash,Awk,我有一个日志文件,我们叫它mylogfile.txt 格式是 日期时间戳,然后是分号分隔符,然后是其他一些我不关心的东西,就本练习而言 例如(这是日志文件中的全部一行-不确定如何在道歉中这样表示) 我目前尝试的只是一个概念验证示例。我希望解析文件,颠倒行顺序,并在输出中返回两列- 1) 只是从第1列解析的时间戳(这是一种日期时间格式,因此我需要放弃日期部分) 2) 从午夜开始以秒表示的时间戳,以毫秒精度表示(和时间戳本身的粒度一致) 因此,从下面的单线示例中,输出为eg 23:59:43.158
23:59:43.158,86383.158
我可以走到一半。我可以使用在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))
testawk在尝试将其他语言与R一起使用时,例如Python,经常会发生这种情况。如果您没有将路径添加到Windows系统路径,那么您就没有告诉RStudio在哪里可以找到可执行文件
Cygwin的根目录通常位于C:\cygwin64
(但可能因安装而异),因此请查找安装并查找bin
文件夹。其中应该有awk可执行文件,但它通常只是指向gawk
可执行文件的符号链接(请验证您自己),以便将其添加到路径中,例如:
Sys.setenv(PATH = paste("C:/cygwin64/bin/gawk", Sys.getenv("PATH"), sep = ":"))
注意:这不会永久添加,因此您必须在每个会话开始时启动或永久识别它。在尝试将其他语言与R(例如Python)一起使用时,通常会发生这种情况。如果您没有将路径添加到Windows系统路径,则您没有告诉RStudio在何处查找可执行文件
Cygwin的根目录通常位于C:\cygwin64
(但可能因安装而异),因此请查找安装并查找bin
文件夹。其中应该有awk可执行文件,但它通常只是指向gawk
可执行文件的符号链接(请验证您自己),以便将其添加到路径中,例如:
Sys.setenv(PATH = paste("C:/cygwin64/bin/gawk", Sys.getenv("PATH"), sep = ":"))
注意:这不会永久添加,因此您必须在每次会话开始时启动或永久识别它。听起来好像根本找不到“awk”,可能它不在您的路径中。请尝试输入awk的完整路径,例如/usr/bin/awk。我没有使用Windows和Cygwin,因此您的实际路径肯定会不同。像“awk”这样的ound根本找不到,可能它不在您的路径中。请尝试输入awk的完整路径,例如/usr/bin/awk。我没有使用Windows和Cygwin,因此您的实际路径肯定会有所不同。只需在R中执行所有操作:
c(
"20170710-10:31:26.121;B@13.43434@1000000.0@20170710-21:15:53.23@@2017071023:59:43.158@@T@20170710-23:59:43.156#B@13.41834@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.47274@1000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.48874@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#",
"20170710-23:59:43.158;B@13.43434@1000000.0@20170710-21:15:53.23@@2017071023:59:43.158@@T@20170710-23:59:43.156#B@13.41834@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.47274@1000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.48874@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#"
) -> log_lines
# you'd get the above with `log_lines <- readLines('filename')`
matched <- stringi::stri_match_first_regex(log_lines, "([[:digit:]]+:[[:digit:]]+:[[:digit:]]+\\.[[:digit:]]+)")[,2]
cat(
rev(
sprintf(
"%s,%s\n",
matched,
lubridate::hms(matched) %>%
as.numeric() %>%
sprintf("%9.3f", .)
)
),
sep=""
)
而且,您可以cat
将其存储到文件或存储在数据帧中(等等)
我想您可能更熟悉awk
,但使用它绝对没有意义。只需在R:
c(
"20170710-10:31:26.121;B@13.43434@1000000.0@20170710-21:15:53.23@@2017071023:59:43.158@@T@20170710-23:59:43.156#B@13.41834@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.47274@1000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.48874@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#",
"20170710-23:59:43.158;B@13.43434@1000000.0@20170710-21:15:53.23@@2017071023:59:43.158@@T@20170710-23:59:43.156#B@13.41834@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.47274@1000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#A@13.48874@4000000.0@20170710-21:15:53.23@@20170710-23:59:43.158@@T@20170710-23:59:43.156#"
) -> log_lines
# you'd get the above with `log_lines <- readLines('filename')`
matched <- stringi::stri_match_first_regex(log_lines, "([[:digit:]]+:[[:digit:]]+:[[:digit:]]+\\.[[:digit:]]+)")[,2]
cat(
rev(
sprintf(
"%s,%s\n",
matched,
lubridate::hms(matched) %>%
as.numeric() %>%
sprintf("%9.3f", .)
)
),
sep=""
)
而且,您可以cat
将其存储到文件或存储在数据帧中(等等)
我想你可能更熟悉awk
,但使用它绝对没有意义。为什么要使用awk
呢?你可以在R中不费吹灰之力地使用它。为什么要在R中使用awk
呢?你可以在R中不费吹灰之力地使用它。/usr/bin/awk已返回。我将添加这一点。谢谢(也请参见下面的海报)。遗憾的是,它不起作用。仍然出现“未找到awk”错误。由于我正在windows box上运行所有这些,我是否需要一个更“windowey”的文件路径?好的,谢谢。原来它是在c:/installs/cygwin64/bin/awk中,所以我尝试使用它运行命令。仍然没有乐趣。尝试重新启动RStudio。是否使用大写c?您还需要每隔一段时间运行该命令当你重新启动RStudio时,因为这不会永久地添加到路径中。好吧,从另一个角度来看,成功了。我查看了awk可执行文件,它似乎只是一个到gawk的链接。因此我尝试使用gawk调用R命令,这似乎很好。就每次都需要运行该命令而言,我想我可以轻松地nough将它添加到我的启动脚本中,这是我日常工作的一部分。非常感谢您的帮助。最终到达了那里。/usr/bin/awk已返回。我将添加它。谢谢(还有下面的海报)。遗憾的是,它不起作用。仍然出现“未找到awk”错误。由于我正在windows box上运行所有这些,我是否需要一个更“windowey”的文件路径?好的,谢谢。原来它是在c:/installs/cygwin64/bin/awk中,所以我尝试使用它运行命令。仍然没有乐趣。尝试重新启动RStudio。是否使用大写c?您还需要每隔一段时间运行该命令当你重新启动RStudio时,因为这不会永久地添加到路径中。好吧,从另一个角度来看,成功了。我查看了awk可执行文件,它似乎只是一个到gawk的链接。因此我尝试使用gawk调用R命令,这似乎很好。就每次都需要运行该命令而言,我想我可以轻松地不,把它添加到我的启动脚本中,这是我日常工作的一部分。非常感谢你的帮助。最终达到了目的。谢谢。我确实知道如何在R中做这件事,但问题是具体如何调用awk。正如我前面所说的,那个特定的例子只是那个。一个例子。我还有其他用例。谢谢。我确实知道如何调用awk在R中做这件事,但问题是具体如何调用awk。正如我前面所说的,那个特定的例子仅仅是那个。一个例子。我还有其他的用例。
10:31:26.121,37886.121
23:59:43.158,86383.158