echoで生成されたコンテンツで22個のRスクリプトを生成するループを作成したいと思います。 22ファイルのコンテンツをインポートできないようにするこのループにはどのような問題がありますか?
私はテストしましたecho "i want that file" > file.r
良い結果。その後、テストし、2つの別々のプロセスとして処理しました。まず、テキストをエコーしてから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
2番目のコード例はフロアのため動作しません。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