Yu Ning 2021-01-27 10:44 采纳率: 100%
浏览 42
已结题

如何用一个脚本分批同时对600个文件数据进行分析,每批20个?

这是我部分的数据,我已经有一个分析脚本,但是我用这个脚本分析的时候是一个一个的进行,分析完600个,需要半年时间,所以需要一个循环,能够同时30个进行,不过这些编号不连续。求一个循环~

#!/usr/bin/bash

doc=/data/re-sequencedata/cleandata
Ref=/data/re-sequencedata/mappingZ/Reference/hic.fa
FM_index=/data/re-sequencedata/mappingZ/index/hic
gatkdoc=/home/yuning/software/gatk-4.1.9.0/gatkdoc
t=20
p_Xmx=50g
tmpdir="tmpdir"
bam_dir="."
G_Xmx=50g

while read id
do
     di=${id}
     echo "===========processing ${di} file============="
     gunzip -c ${doc}/${di}_1_clean.fq.gz >${di}_1_clean.fq
     gunzip -c ${doc}/${di}_2_clean.fq.gz >${di}_2_clean.fq
     grep "^@A00" ${di}_1_clean.fq|cut -d ':' -f1-4|sort|uniq >${di}.RG.table &&

     while read rg
     do
       affix=`echo $rg|tr ":" "-"`
       grep -A 3 ${rg} ${di}_1_clean.fq >${di}-${affix}_1_clean.fq 
       grep -A 3 ${rg} ${di}_2_clean.fq >${di}-${affix}_2_clean.fq 
     done <${di}.RG.table 
     rm ${di}_1_clean.fq ${di}_2_clean.fq &&

     while read rg
     do
       affix=`echo $rg |tr ":" "-"`
       bwa mem -t $t -M -R "@RG\tID:${affix}\tSM:${di}\tPL:illumina" $FM_index ${di}-${affix}_1_clean.fq ${di}-${affix}_2_clean.fq >${di}-${affix}.sam && rm ${di}-${affix}_*.fq
     done <${di}.RG.table 

     ls -v ${di}-*.sam|xargs -I [] echo "I="[]|xargs -L 1000000 \
     java -Xmx${p_Xmx} -jar /home/yuning/software/picard/build/libs/picard.jar MergeSamFiles \
        O=${di}.merged.sorted.bam \
        SORT_ORDER=coordinate \
        CREATE_INDEX=true \
        VALIDATION_STRINGENCY=LENIENT \
        REFERENCE_SEQUENCE=/data/re-sequencedata/mappingZ/Reference/hic.fa \
        TMP_DIR=${tmpdir} 2>${di%}.log \
        && rm ${di}-*.sam &&

     java -Xmx${p_Xmx} -jar /home/yuning/software/picard/build/libs/picard.jar MarkDuplicates \
        I=${di}.merged.sorted.bam \
        O=${di}.merged.sorted.dedup.bam \
        M=${di}.Marked_dup_metrics.txt \
        CREATE_INDEX=true \
        VALIDATION_STRINGENCY=LENIENT \
        REFERENCE_SEQUENCE=/data/re-sequencedata/mappingZ/Reference/hic.fa \
        TMP_DIR=${tmpdir} 2>${di%}.log \
        && rm ${di}.merged.sorted.bam* &&

      if [ ! -f "${tmpdir}/${di}_h" ];then
                    mkdir -p ${tmpdir}/${di}_h
          else
                    rm -r ${tmpdir}/${di}_h/*
      fi

     gatk --java-options "-Djava.io.tmpdir=${tmpdir}/${di}_h -Xmx${G_Xmx}" \
        HaplotypeCaller \
        -ERC GVCF \
        -R /data/re-sequencedata/mappingZ/Reference/hic.fa \
        -I ${di}.merged.sorted.dedup.bam \
        -O ${di}.gvcf.gz \
        1>${di}.gvcf.log 2>&1 \
        && rm -r ${tmpdir}/${di}_h
done

以上是我用来分析的脚本,摘自https://blog.csdn.net/Gossie/article/details/109296315。这个脚本是可以分析,但是是一个一个的分析,需要很久。本身对循环不怎么精通,急求大神给一个~~~另外,怎么给里边的bwa、picard、gatk建立临时文件夹,因为有时候会出现out of memory的情况而脚本停止运行。

  • 写回答

1条回答 默认 最新

  • 502203305 2021-01-27 15:21
    关注
    files=(`ls *.fq.gz`)
    filel=${#files[@]}
    idx=0
    while [[ $idx -lt $filel ]]
    do
    for((j=0;j<20&&$idx<$filel; j++))
    do
        ./xxx.sh ${files[$idx]} &
        idx=$(($idx+1))
    done
    wait `jobs -p`
    done

    把xxx.sh修改成对应的单个处理shell就行了。

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮