我是一个不常使用 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”。有小费吗?
ps 我无权写入找到输入文件的目录。
答案1
您需要删除路径,然后删除不需要的扩展名:
base=${file##*/}
newfile=${base%_novoalign.bam}_output.txt
然后使用:
... > "/home/sub2/sub3/$newfile"
在此处查看 Shell 参数扩展以了解其他选项:
答案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