다음 파일이 있습니다.
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
이러한 유형의 많은 파일에 대해 이 작업을 수행하는 것은 매우 지루합니다. 누군가 이것을 자동화하고 설명하는 스크립트를 작성하는 데 도움을 줄 수 있습니까?
답변1
각 소스 파일 이름을 약간 수정하여 원본 파일 이름을 딴 파일에 결과를 저장할 수 있습니다. 이 정보를 사용하여 루프를 구축할 수 있습니다.
다음 내용을 파일에 넣으세요.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
답변2
먼저 여기입니다. 아직 테스트하지는 않았지만 솔루션을 만드는 데 도움이 될 수 있습니다.
#!/bin/bash
for filename in *.bam;do
number=$( echo $filename | grep -o '[0-9]\+' )
bedtools intersect -abam $filename -b CLIA-bed-for-DRAGEN_1.bed > "$filename"Inter.bam
samtools sort "$filename"Inter.bam > "$filename"InterSort.bam
samtools depth -a "$filename"InterSort.bam -b CLIA-bed-for-DRAGEN_1.bed > "$filename"InterSortDepth.txt
awk '$3<20' "$filename"InterSortDepth.txt > "$number"_20.txt
done