echo에서 생성된 콘텐츠로 22개의 R 스크립트를 생성하는 루프를 작성하고 싶습니다. 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