Linux
為許多文件自動創建腳本
我很難解決這個問題。我有一些基因文件需要過濾。由於我的集群的設置方式,它會在我過濾 VCF 中的所有文件/樣本之前超時。因此,這意味著我必須手動編寫接近 1,250 個腳本才能正確執行此操作。顯然,可以在 Notepad++ 中複製粘貼和手動更改它們以獲得正確的染色體,但我不希望整天坐在辦公桌前做 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 為增量增加。必須有一種方法可以做到這一點,我無法想像人們會整天坐著複製粘貼,如果他們需要送出數百個腳本來處理特定問題文件。
我相信你正在尋找這樣的東西:
#!/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
這將為
"$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"