【问题标题】:Combining R + awk + bash commands结合 R + awk + ​​bash 命令
【发布时间】:2012-03-02 10:24:18
【问题描述】:

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

此外,在 R 文件中,我将 R 与 bash 结合起来,因此我的代码如下所示:

!/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 命令的操作,但仍然出现错误。该程序无法识别我的命令,因此我无法输入要跳到我的函数的行数。这是我的代码:

**nline

nline

我在第一列中查找模式 m/s 以了解我的标题文本在哪里。我在 w7 下使用 R。

【问题讨论】:

    标签: r


    【解决方案1】:

    除了 Vincent 提示使用 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> 
    

    【讨论】:

      【解决方案2】:

      您可以使用system 从 R 运行外部程序。

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

      【讨论】:

      • 但是我在哪里使用它,在我的脚本或我的 SAmpleStatus.r 文件中。它是如何运行的?你能更精确一点吗?谢谢
      • 你可以在你的R脚本中使用它来调用你的awk脚本(当然你需要替换--version);它以字符串向量的形式返回 awk 脚本的输出。
      猜你喜欢
      • 2014-08-22
      • 1970-01-01
      • 2017-11-25
      • 2023-03-22
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多