如何将内容回显到 cat 生成的一系列新文件中

如何将内容回显到 cat 生成的一系列新文件中

我想编写一个循环来生成 22 个 R 脚本,其中内容在 echo 中生成。这个循环到底出了什么问题,导致我无法获取到22个文件对应的内容?

我测试过echo "i want that file" > file.r

效果很好。然后我测试了,它被视为两个单独的进程。首先它回显文本,然后生成 22 个空文件。

for i in `seq 1 22`; do
    echo "a <- read.delim('file${i}.txt', header=T, check.names=FALSE);
        library('splitstackshape');
        loc1 <- cSplit(a, 'V1', ':');
        rm(a);
        out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
        write.table(out, 'out_file${i}.txt', sep='\t', row.names=F, quote=F)"; 
> build_file${i}.r; done

然后我尝试了这个..仍然不起作用..

    for i in `seq 1 22`; do
    echo "a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
    library("splitstackshape");
    loc1 <- cSplit(a, "V1", ":");
    rm(a);
    out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
    write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)";
    cat > loc_chr${i}.r; done

答案1

不确定我完全遵循脚本中的引用以及您希望命令cat执行的操作,因为它是从非重定向的标准输入(即可能是您的键盘)读取的。怎么样

for i in `seq 1 22`
  do cat <<- EOF > loc_chr${i}.r
"a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
    library("splitstackshape");
    loc1 <- cSplit(a, "V1", ":");
    rm(a);
    out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
    write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)"
EOF
   done

答案2

您的第一个代码示例无法正常工作,因为它有> build_file${i}.r自己的行,该行没有将任何内容重定向到 20 个文件中。附加> build_file${i}.r到您的末尾echo

cat您的第二个代码示例由于底部而无法工作。您没有提供想要cat连接的内容,因此它正在等待输入。

您应该删除该cat行,并将> loc_chr${i}.r其附加到echo.

for i in `seq 1 22`; do
echo "a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
library("splitstackshape");
loc1 <- cSplit(a, "V1", ":");
rm(a);
out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)" > loc_chr${i}.r
done

相关内容