我想写一个循环来生成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发布于 2018-12-04 15:49:08
我不确定我完全遵循了脚本中的引用,以及您希望cat命令做什么,因为它从非重定向的stdin (大概是您的键盘)中读取。不如像这样
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发布于 2018-12-04 15:48:35
您的第一个代码示例无法工作,因为它在自己的行上有> 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
donehttps://unix.stackexchange.com/questions/485923
复制相似问题