Bash
對多個文件執行一系列命令
我有以下文件:
FC_014_6361.bam FC_014_6462.bam FC_014_6183.bam
目前我在每個文件上分別執行以下命令。例如,
FC_014_6361.bam
命令是:$ bedtools intersect -abam FC_014_6361.bam -b CLIA-bed-for-DRAGEN_1.bed > FC_014_6361Inter.bam $ samtools sort FC_014_6361Inter.bam > FC_014_6361InterSort.bam $ samtools depth -a FC_014_6361InterSort.bam -b CLIA-bed-for-DRAGEN_1.bed > FC_014_6361InterSortDepth.txt $ awk '$3<20' FC_014_6361InterSortDepth.txt > 6361_20.txt
對這種類型的許多文件執行此操作很乏味。有人可以幫助編寫一個可以自動執行此操作並對其進行解釋的腳本嗎?
對於每個源文件名,您稍作修改並將結果保存在以原始文件命名的文件中。使用這些資訊,我們可以建構一個循環。
將以下內容放入文件中,例如
doit
#!/bin/bash # for bamsrc in "$@" # For each item on the command line do prefix="${bamsrc%.bam}" # Strip off trailing .bam result="${prefix##*_}" # Strip off leading *_ echo "Processing '$bamsrc' into intermediate bam files and ${result}_20.txt" # Perform the processing bedtools intersect -abam "$bamsrc" -b CLIA-bed-for-DRAGEN_1.bed > "${prefix}Inter.bam" samtools sort "${prefix}Inter.bam" >"${prefix}InterSort.bam" samtools depth -a "${prefix}InterSort.bam" -b CLIA-bed-for-DRAGEN_1.bed > "${prefix}InterSortDepth.txt" awk '$3<20' "${prefix}InterSortDepth.txt" > "${result}_20.txt" done
使腳本文件可執行
chmod a+x doit
然後使用源文件名作為空格分隔列表執行它
./doit FC_014_6361.bam FC_014_6462.bam FC_014_6183.bam