2012-03-02 85 views
7

我想结合awk和R语言。问题是我在指定的目录中有一组* .txt文件,我不知道文件头部的长度。在某些情况下,我必须跳过25行,而在其他情况下,我必须跳过27等等。所以我想输入一些awk命令来获取跳过的行数。一旦我有这个价值,我可以开始R.处理数据结合R + awk + ​​bash命令

此外,在R文件结合我为r的庆典,所以我的代码如下所示:

!/usr/bin/env Rscript 
... 
argv <- commandArgs(T) 
**error checking...** 
import_file <- argv[1] 
export_file <- argv[2] 
**# your function call** 
format_windpro(import_file, export_file) 

在哪里,我怎么能输入我的awk命令。谢谢!

我试着做你告诉我关于awk命令的信息,但仍然出现错误。该程序不能识别我的命令,所以我不能输入要跳到我的函数的行数。这里是我的代码:

** n第< - 粘贴( '$(grep的-n 'M/S' import_file | awk的-F “:” '{$打印1}')')

n第< - 扫描(管道(nline),安静= T)**

我在第一列寻找模式m/s,以便知道我的标题文本在哪里。我在w7下使用R。

回答

8

运行外部程序除了使用system("awk ...", intern=TRUE)的文森特的提示,你也可以用pipe()功能是普通的文本连接的一部分:

R> sizes <- read.table(pipe("ls -l /tmp | awk '!/^total/ {print $5}'")) 
R> summary(sizes) 
     V1   
Min. :  0 
1st Qu.:  482 
Median : 4096 
Mean : 98746 
3rd Qu.: 13952 
Max. :27662342 
R> 

在这里,我将命令编入awk,然后读取awk的所有输出,也可能是单行:

R> cmd <- "ls -l /tmp | awk '!/^total/ {sum = sum + $5} END {print sum}'" 
R> totalsize <- scan(pipe(cmd), quiet=TRUE) 
R> totalsize 
[1] 116027050 
R> 
+0

++ ve,谢谢你的好回答德克先生。 – RavinderSingh13 2017-12-18 06:13:45

6

您可以使用system从R.

system("gawk --version", intern=TRUE) 
+0

但我在哪里使用它,在我的脚本或我的SAmpleStatus.r文件中。它是如何运行的?你能更精确一点吗?谢谢 – JPV 2012-03-02 12:05:21

+0

你可以在你的R脚本中使用它来调用你的awk脚本(当然你需要替换'--version');它会返回awk脚本的输出,作为字符串的一个向量。 – 2012-03-02 12:17:26