catによって生成された新しい一連のファイルにコンテンツをエコーする方法

catによって生成された新しい一連のファイルにコンテンツをエコーする方法

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

cat2番目のコード例はフロアのため動作しません。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

関連情報