自动为许多文件创建脚本

自动为许多文件创建脚本

我很难解决这个问题。我有一些需要过滤的遗传学文件。由于我的集群设置方式,在我过滤 VCF 中的所有文件/样本之前就会超时。因此,这意味着我必须手动编写近 1,250 个脚本才能正确完成此操作。显然,在 Notepad++ 中复制粘贴并手动更改它们是可能获得正确的染色体的,但我不想坐在办公桌前一整天直接执行 CTRL-C、CTRL-H、CTRL-S。我想自动执行此操作,以便我可以获取基本脚本,修改我需要的内容,并将它们保存到新文件中。我已经掌握了基础知识,但我不知道如何将所有这些编译在一起,谷歌也没有给我带来任何帮助。

我的文件如下所示:

    #!/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"

相关内容