저는 UNIX를 자주 사용하지 않는 사용자이고 이것이 일반 사용자에게는 매우 사소한 일이라고 확신하므로 사과드립니다. 다음 코드가 있습니다.
for file in /home/sub1/samples/aaa*/*_novoalign.bam
do
samtools depth -r chr9:218026635-21994999 *_novoalign.bam < $file > /home/sub2/sub3/${file}.out
done
입력 폴더와 비슷한 이름을 가진 sub2/sub3/ 파일로 출력을 보내고 싶습니다. "파일이나 디렉터리가 없습니다"라고 뜹니다. 이상적으로는 여기로 보내고 싶습니다. "_novoalign.bam"을 제거하고 "_output.txt"와 같은 새 결말을 추가하세요. 어떤 팁이 있나요?
p.s. 입력 파일이 있는 디렉터리에 쓸 수 있는 권한이 없습니다.
답변1
경로를 제거한 다음 원하지 않는 확장명을 제거해야 합니다.
base=${file##*/}
newfile=${base%_novoalign.bam}_output.txt
그런 다음 다음을 사용하십시오.
... > "/home/sub2/sub3/$newfile"
다른 옵션은 여기에서 Shell Parameter Expansion을 확인하세요.
답변2
cd /home/sub1/samples
for file in aaa*/*_novoalign.bam; do
target_file="${file%_novoalign.bam}_output.txt"
samtools depth -r chr9:218026635-21994999 <"$file" >"$target_file"
done