【问题标题】:Use of variable in Unix command line在 Unix 命令行中使用变量
【发布时间】:2017-02-09 03:36:56
【问题描述】:

我正在努力让自己的生活更轻松一点,但它还没有奏效。我正在尝试做的是以下内容:

注意:我在 unix 服务器上运行 R,因为我的脚本的其余部分在 R 中。这就是为什么有 system(" ")

system("TRAIT=some_trait")

system("grep var.resid.anim rep_model_$TRAIT.out > res_var_anim_$TRAIT'.xout'",wait=T)

当我在 putty 中运行完全相同的东西时(当然没有 system(" ")),就会读取正确的文件并创建正确的输出。当我只删除我创建的变量时,该脚本也可以工作。但是,我需要多次这样做,所以一个变量对我来说很方便,但我无法让它工作。

【问题讨论】:

    标签: r unix environment-variables


    【解决方案1】:

    此代码在控制台上不打印任何内容。

    system("xxx=foo")
    system("echo $xxx")
    

    但以下是。

    system("xxx=foo; echo $xxx")
    

    一旦你完成对“system”的调用,系统就会忘记你的变量定义。

    在你的情况下,如何尝试:

    system("TRAIT=some_trait; grep var.resid.anim rep_model_$TRAIT.out > res_var_anim_$TRAIT'.xout'",wait=T)
    

    【讨论】:

      【解决方案2】:

      你可以把这一切都保存在 R 中:

      grep_trait <- function(search_for, in_trait, out_trait=in_trait) {
        l <- readLines(sprintf("rep_model_%s.out", in_trait))
        l <- grep(search_for, l, value=TRUE) %>% 
        writeLines(l, sprintf("res_var_anim_%s.xout", out_trait))
      }
      
      grep_trait("var.resid.anim", "haptoglobin")
      

      如果担心文件首先被读入内存(即如果它们是大文件),那么:

      grep_trait <- function(search_for, in_trait, out_trait=in_trait) {
        fin <- file(sprintf("rep_model_%s.out", in_trait), "r")
        fout <- file(sprintf("res_var_anim_%s.xout", out_trait), "w")
        repeat {
          l <- readLines(fin, 1)
          if (length(l) == 0) break;
          if (grepl(search_for, l)[1]) writeLines(l, fout)
        }
        close(fin)
        close(fout)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-07
        • 2016-09-19
        • 2015-11-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 2019-03-04
        • 1970-01-01
        相关资源
        最近更新 更多