Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何编写for循环,使一个程序对一组94个DNA样本进行重复?_Python_Bash_For Loop_Sample Data - Fatal编程技术网

Python 我如何编写for循环,使一个程序对一组94个DNA样本进行重复?

Python 我如何编写for循环,使一个程序对一组94个DNA样本进行重复?,python,bash,for-loop,sample-data,Python,Bash,For Loop,Sample Data,我已经在bash shell中编写了一些代码,这样我就可以将它提交给我所在大学的超级计算机,以便从我拥有的一批DNA提取物中编辑出污染序列。基本上,这段代码所做的是从负提取空白中提取序列,然后从所有其他样本中减去它 我已经找到了如何使其与单个示例一起工作的方法,但我正在尝试编写一个for循环,以便小代码块能够为每个示例重复它们自己,该文件的结果是一个.sam文件,每个样本都有一个唯一的名称,其中样本的正向和反向读取都被合并并编辑以防止污染。我已经广泛地检查了堆栈溢出以获得此特定问题的帮助,但无法

我已经在bash shell中编写了一些代码,这样我就可以将它提交给我所在大学的超级计算机,以便从我拥有的一批DNA提取物中编辑出污染序列。基本上,这段代码所做的是从负提取空白中提取序列,然后从所有其他样本中减去它

我已经找到了如何使其与单个示例一起工作的方法,但我正在尝试编写一个for循环,以便小代码块能够为每个示例重复它们自己,该文件的结果是一个.sam文件,每个样本都有一个唯一的名称,其中样本的正向和反向读取都被合并并编辑以防止污染。我已经广泛地检查了堆栈溢出以获得此特定问题的帮助,但无法将相关的已回答问题应用到我的代码中

下面是我试图为一个名为F10-61C-3-V4_S78_L001_R1_001的单独样本所做的部分工作的示例。fastq:

以下是我到目前为止在这个过程中的这一小步所得到的信息:


for file in /file directory/*.fastq

do

bowtie2 -q --end-to-end --very-sensitive \
-N 0 -L 31 --time --reorder \
-x A1-BlankIndex \
-1  /file directory/*.fastq 
-2 /file directory/*.fastq \
-S *.sam

done

在生成的slurm文件中,我现在遇到的错误与-S命令有关。我不知道如何为每个合并和编辑的示例指定.sam文件的唯一名称。我刚开始用python编写for循环,我唯一的经验是在R中,我确信这是一个简单的修复方法,但我还没有找到这个问题的任何具体答案。非常感谢您的反馈

这是第一次尝试。注意:我假设do和done之间的整个片段是一个命令,因此需要继续标记\

还要注意,在我的示例中,$file出现两次。我对此感到有点不安,但在您描述的示例中,您似乎明确需要这一点

最后请注意,我只给sam文件一个数字名称,因为我不知道您希望该名称是什么

我希望这能提供足够的信息让你开始

!/bin/bash i=0 对于/file/directory/*.fastq中的文件 做 bowtie2-q-端到端-非常敏感\ -n0-l31-时间-重新排序\ -x A1空白指数\ -1美元文件\ -2美元文件\ -S$i.sam i=$i+1 完成
这可能与您的示例相同,但会使用正则表达式自动选择输出文件名reference:

#!/usr/bin/env bash

input_samples='/input_samples_directory'
output_samples='/output_merged_samples_directory'

while IFS= read -r -d '' R1_fastq; do
  # Deduce R2 sample from R1 sample file name
  R2_fastq="${R1_fastq/_R1_/_R2_}"
  # RegEx match capture group in () for the output sample reference
  [[ $R1_fastq =~ [^-]+-([[:digit:]]+[[:alpha:]]-[[:digit:]]).* ]]
  # Construct the output sample file path with the captured referrenced
  # from the RegEx above
  sam="$output_samples/${BASH_REMATCH[1]}.sam"
  # Perform the merging
  bowtie2 -q --end-to-end --very-sensitive \
    -N 0 -L 31 --time --reorder \
    -x A1-BlankIndex \
    -1 "$R1_fastq" \
    -2 "$R2_fastq" \
    -S "$sam"
done < <(find "$input_samples" -maxdepth 1 -type -f -name '*_R1_*.fastq' -print0)

在他的例子中@KimL。对-1和-2选项参数分别使用R1样本和R2样本。但是您的脚本为这两者提供了相同的$file名称。bowtie2需要一对正向和反向样本。我添加了一个答案,它迭代R1样本并自动选择相应的R2样本,以及提取输出合并样本的引用。嗨,Roadowl,非常感谢你花时间帮助我回答我的问题。我发现Lea使用正则表达式的回答对我来说非常有效,但是你的回答帮助我理解了如何设置循环的基本框架,所以非常感谢!好的,首先我要感谢你抽出时间来帮助我回答我的问题。正则表达式格式真的帮助我解决了这个问题!我知道REs是什么,但以前从未使用过,所以非常感谢您为我澄清这一点。到目前为止,这种格式似乎已经奏效了!超级计算机可能需要一段时间来处理所有的序列,但我会让你了解我的最新结果。再次感谢!
#!/usr/bin/env bash

input_samples='/input_samples_directory'
output_samples='/output_merged_samples_directory'

while IFS= read -r -d '' R1_fastq; do
  # Deduce R2 sample from R1 sample file name
  R2_fastq="${R1_fastq/_R1_/_R2_}"
  # RegEx match capture group in () for the output sample reference
  [[ $R1_fastq =~ [^-]+-([[:digit:]]+[[:alpha:]]-[[:digit:]]).* ]]
  # Construct the output sample file path with the captured referrenced
  # from the RegEx above
  sam="$output_samples/${BASH_REMATCH[1]}.sam"
  # Perform the merging
  bowtie2 -q --end-to-end --very-sensitive \
    -N 0 -L 31 --time --reorder \
    -x A1-BlankIndex \
    -1 "$R1_fastq" \
    -2 "$R2_fastq" \
    -S "$sam"
done < <(find "$input_samples" -maxdepth 1 -type -f -name '*_R1_*.fastq' -print0)