我正在尝试写一个脚本,它应该像下面这样工作,但是不知怎么的,我无法得到写的方式来放置语法。
我有像S_12_O_319_K4me1这样的文件夹。
而每个文件夹中的内容都是S_12_O_319_K4me1_S12816.sorted.bam。
因此,我想编写一个脚本,在这个脚本中,我的脚本进入循环中同名文件夹,然后标识*.bam文件并执行操作,但我无法将正则表达式放入其中。这就是我试过的:
#!/bin/bash
#$ -S /bin/bash
spp_run=/path/phantompeakqualtools/run_spp.R
bam_loc=/path/ChIP-Seq/output
samples="S_12_O_319_K27me3
S_12_O_319_K4me1
S_12_O_319_K4me3
S_12_O_319_K27ac"
for s in $samples; do
echo "Running SPP on $s ..."
Rscript $spp_run -c=$bam_loc/$s/${s}_S[[0-9]+\.sorted.bam -savp -out=$bam_loc/$s/${s}".run_spp.out"
done我无法识别与上述正则表达式匹配的数字。
我哪里搞错了?
编辑:我在下面尝试过
#!/bin/bash
#$ -S /bin/bash
spp_run=/path/tools/phantompeakqualtools/run_spp.R
bam_loc=/path/ChIP-Seq/output
samples="S_12_O_319_K27me3
S_12_O_319_K4me1
S_12_O_319_K4me3"
for s in $samples; do
echo "Running SPP on $s ..."
echo $bam_loc/$s/${s}_S*.sorted.bam
inbam=$bam_loc/$s/${s}_S*.sorted.bam
echo $inbam
Rscript $spp_run -c=$inbam -savp -out=$bam_loc/$s/${s}".run_spp.out"
done
echo "done"错误
Error in parse.arguments(args) :
ChIP File:/path/ChIP-Seq/output/S_12_O_319_K27me3/S_12_O_319_K27me3_S*.sorted.bam does not exist
Execution halted即使$inbam值为/path/ChIP-Seq/output/S_12_O_319_K27me3/S_12_O_319_K27me3_S12815.sorted.bam,也不识别该文件。
发布于 2016-05-13 13:33:30
我找到了对我的查询的答案,下面是代码。不是一个优雅的,但它有效。我意识到Rscript需要全名和完整路径,所以我只是将echo命令的输出初始化为一个变量,并将它作为输入文件参数传递给Rscript,它获得了一个具有完整文件名的完整路径,因此现在它可以识别输入文件。
这不是一种优雅的方式,但对我来说仍然有效。
#!/bin/bash
#$ -S /bin/bash
spp_run=/path/tools/phantompeakqualtools/run_spp.R
bam_loc=/path/ChIP-Seq/output
samples="S_12_O_319_K27me3
S_12_O_319_K4me1
S_12_O_319_K4me3"
for s in $samples; do
echo "Running SPP on $s ..."
echo $bam_loc/$s/${s}_S*.sorted.bam
inbam=$bam_loc/$s/${s}_S*.sorted.bam
echo $inbam
infile=`echo $inbam`
Rscript $spp_run -c=$infile -savp -out=$bam_loc/$s/${s}".run_spp.out"
done
echo "done"谢谢大家的建议和意见。我的代码不优雅,但它正在工作,所以我把答案放在这里。
发布于 2016-05-12 20:37:31
可以在find命令中使用regex:
export spp_run=/path/phantompeakqualtools/run_spp.R
export bam_loc=/path/ChIP-Seq/output
export dir
samples=(S_12_O_319_K27me3 S_12_O_319_K4me1 S_12_O_319_K4me3 S_12_O_319_K27ac)
for dir in ${samples[@]}; do
find . -type f -regex ".*/*${dir}_S[0-9]+\.sorted\.bam" \
-exec bash -c 'echo Rscript $spp_run -c=$bam_loc/${dir}/${1##*/} -savp -out=$bam_loc/${dir}/${dir}".run_spp.out"' _ {} \;
done注意:如果输出满足您的需要,只需在echo之前删除Rscript。
https://stackoverflow.com/questions/37192977
复制相似问题