많은 파일에 대한 스크립트를 자동으로 생성

많은 파일에 대한 스크립트를 자동으로 생성

나는 이것을 알아내는 데 어려움을 겪고 있습니다. 필터링해야 할 유전학 파일이 있습니다. 내 클러스터가 설정된 방식 때문에 VCF의 모든 파일/샘플을 필터링하기 전에 시간이 초과됩니다. 따라서 이 작업을 올바르게 수행하려면 1,250개에 가까운 스크립트를 수동으로 작성해야 했습니다. 분명히 메모장++에 복사하여 붙여넣고 수동으로 변경하여 올바른 염색체를 얻는 것이 가능하지만 하루 종일 책상에 앉아 CTRL-C, CTRL-H, CTRL-S만 사용하고 싶지 않습니다. 기본 스크립트를 가져와서 필요한 것을 수정하고 새 파일에 저장할 수 있도록 이 작업을 자동화하고 싶습니다. 기본적인 사항은 알고 있지만 이를 모두 함께 컴파일하는 방법을 모르고 Google이 나를 어디로도 안내하지 않습니다.

내 파일은 다음과 같습니다.

    #!/bin/bash
    #SBATCH stuff

    cd /Where/My/Stuff/Is/

    while read i; do

    ./bcftools view Chrom1.vcf --options-for-bcftools -S 
    /Where/My/Samples/Are/${i}_Samples.txt -o 
    /Where/I/Want/NewFile/To/Go/${i}_Chrom1.vcf; done < /Where/My/Samples/Are/FullSampleList.txt

내 생각과 내가 입력해야 할 내용은 다음과 같습니다.

    for x in {1..22}; do

    cat Script1.sh

    sed 's/./bcftools view Chrom${x}.vcf --options-for-bcftools -S /Where/My/Samples/Are/${i}_Samples.txt -o /Where/I/Want/NewFile/To/Go/${i}_Chrom1.vcf; done < /Where/My/Samples/Are/FullSampleList.txt Script1.sh > Script2.sh; done

정말 도움이 필요해요. 생성된 스크립트 이름은 Script[previousnumber+1].sh여야 하므로 파일 이름은 1씩 증가합니다. 이를 수행할 수 있는 방법이 있을 것입니다. 특정 파일을 처리하기 위해 제출해야 하는 스크립트가 수백 개라면 사람들이 하루 종일 복사-붙여넣기 작업을 하는 것은 상상할 수 없습니다.

답변1

나는 당신이 다음과 같은 것을 찾고 있다고 믿습니다.

#!/bin/bash

## Set the scriptHeader variable to hold the SBATCH commands you need
read -r -d '' scriptHeader <<EoF
#!/bin/bash

#SBATCH line 1
#SBATCH line 2
#SBATCH line 3
EoF

stuffPath=/Where/My/Stuff/Is
samplePath=/Where/My/Samples/Are
outputPath=/Where/I/Want/NewFile/To/Go


while read sampleName; do
  for ((chr=1; chr<=22; chr++)); do 
    command="$stuffPath/bcftools view"
    inVCF="$thisSamplePath/$chr.vcf"
    thisSamplePath="$samplePath/${sampleName}_Samples.txt"
    thisOutputPath="$outputPath/${sampleName}_Chrom${chr}.vcf"

    printf '%s\n%s "%s" -S "%s" -o "%s"\n' "$scriptHeader" \
           "$command" "$inVCF"\
           "$thisSamplePath/$chr.vcf" \
           "$thisOutputPath" > "$stuffPath/$sampleName.$chr.sh"
  done
done < "$samplePath"/FullSampleList.txt 

그러면 .txt의 각 줄에 대해 22개의 파일이 생성됩니다 "$samplePath"/FullSampleList.txt. 각 파일은 다음과 같습니다.

#!/bin/bash
SBATCH line 1
SBATCH line 2
SBATCH line 3
/Where/My/Stuff/Is/bcftools view "/Where/My/Samples/Are/ACB_YRI_Samples.txt/6.vcf" -S "/Where/My/Samples/Are/ACB_YRI_Samples.txt/6.vcf" -o "/Where/I/Want/NewFile/To/Go/ACB_YRI_Chrom6.vcf"

관련 정보