问题标签 [fastq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 使用 bash 中的变量打开名称中带有反斜杠的文件
一个简单问题的复杂名称。我正在尝试为我离开时与我一起工作的人制作一个白痴证明程序。我正在使用 read 将文件名保存为变量。当我从名称中有空格(因此有反斜杠)的折叠中拖放文件时,它将不起作用。如果我直接输入名称就可以了。下面的例子。
但是,如果我输入它而不是使用变量。
如果我使用变量从文件夹名称中取出空间,则效果很好。
makefile - 如何获取生成文件以运行所有命令,而不考虑目标或依赖项
我正在编写一个 GNUmakefile 来创建一个工作流来分析一些生物序列数据。数据采用名为 fastq 的格式,然后经过许多清理和分析工具。我附上了我目前写的内容,从清洁前的质量控制到之后的质量控制,我一路走来。我的问题是我不确定如何运行“fastqc”命令,因为它的目标不依赖于工作流中的任何其他步骤。
bash - 对多个配对文件执行命令
假设我有一个命令 command.py,它将文件配对File_01_R1.fastq
到File_01_R2.fastq
. 在单对上执行的命令如下所示:
但是,我有很多文件,每个文件都有 R1 和 R2 版本。我怎么能告诉这个命令遍历我拥有的每个文件,所以它也执行
等等。
bash - 在配对文件上执行命令,然后重命名输出
command.py
, 将两个配对文件合并在一起,CA01_S1_R1.fastq
和CA01_S1_R2.fastq
. 然后它将结果打印到一个新目录paired.out
并命名结果文件paired.fastq
。完整的命令将读取
command.py -f CA01_S1_R1.fastq -r CA01_S1_R2.fastq -o paired.out
但是,我想对许多文件执行此命令,然后将所有输出保存到同一目录中。此外,输出需要具有唯一的名称。所以,我也想发送文件 2 和 3,同时有效地运行这些命令:
command.py -f CA02_S2_R1.fastq -r CA02_S2_R2.fastq -o paired.out
command.py -f CA03_S3_R1.fastq -r CA03_S3_R2.fastq -o paired.out
但是,即使我有代码在所有样本上循环此命令,该命令也会继续覆盖最后配对的输出,因为所有输出都保存在文件夹paired.out
中,文件名为paired.fastq
. 有没有我可以编写的简单循环,它将通过命令发送每个文件对,然后进入文件夹并将文件输出重命名paired.fastq
为CA01_paired.fastq
,然后对我的所有文件重复?
我知道我可以使用以下命令通过命令发送多个文件:
我想在这个循环中添加第二条指令,只 cd 进入这个文件夹,然后重命名文件,每次递增 1。我不知道如何设置增量变量。我想它看起来像这样:
python - 将相同的命令应用于多个子目录中的多个文件
我有一个包含 94 个子目录的目录,每个子目录包含一个或两个文件*.fastq
。我需要对这些文件中的每一个应用相同的 python 命令并生成一个新文件qc_*.fastq
。
我知道如何将 bash 脚本单独应用于每个文件,但我想知道是否有办法编写 bash 脚本来一次将命令应用于所有文件
bash - 解析文件并使用一些字段作为变量,在 bash 中使用标题作为名称
我有一个文件,其中第一行包含一系列字段,制表符分隔(\t
)。我正在尝试遍历这些行并将某些字段用作程序的变量。我到目前为止的代码如下:
输出(错误):
它失败了,因为它没有正确获取字段。也许<>
角色正在制造混乱?不同文件的列名称排序不同,并且某些文件中缺少某些列。我被困在这里。
该文件如下所示:
python - 如何让我的 Python 脚本更快?
我对 Python 很陌生,并且我编写了一个(可能非常难看的)脚本,该脚本应该从 fastq 文件中随机选择一个序列子集。fastq 文件将信息存储在每块四行的块中。每个块中的第一行以字符“@”开头。我用作输入文件的 fastq 文件为 36 GB,包含大约 14,000,000 行。
我试图重写一个已经存在的使用太多内存的脚本,并且我设法减少了很多内存使用量。但是脚本需要永远运行,我不明白为什么。
grep 步骤几乎不需要任何时间,但 500 多分钟后,脚本仍未开始写入输出文件。所以我想这是 grep 和最后一个 for 循环之间的步骤之一,需要这么长时间。但我不明白究竟是哪一步,以及我能做些什么来加快它。
bash - bash中的一个for循环中的两个变量
我有一个目录,里面有两种文件类型:*.sai 和 *fastq,我想在一个 shell for 循环中使用这两个变量:
在命令之后,do
我想将相应的 *.sai 和 *.fastq 数据加载到程序中(bwa samse)。你能帮我语法吗?
例子:
在一个目录中xx.fast xx.sai yy.fastq yy.sai
,程序 bwa samse 需要一次处理两个相应的文件 -bwa samse xx.fastq xx.sai...
非常感谢您的任何想法。
python - 正则表达式:匹配从简单字符串派生的多个模式
我有以下任务:从 30 个字符长的模式序列开始(它实际上是 DNA 序列,以免将其称为 P30)我需要在文本文件中找到所有以 (^agacatacag... ) 开头的行,精确的 P30,然后是 29 30、28 和最多 10 个字符的最后一个字符。我需要做的只是删除模式的第一个字符并继续搜索。为简单起见,我目前需要精确匹配,但允许 1 个不匹配的时间更长(20-30 个字符长的模式)会更好。
我目前相当慢的解决方案是创建一个每行一个截断模式的 shell 文件,然后 grep[1] 它。这意味着我正在阅读 20 倍的巨大、几 GB 的文本文件,这可能需要一天以上的时间。
我可以切换到 python,创建一个包含所有必需模式的列表/元组,然后只读取一次文件,每个序列循环 20 次,使用 pypy 加快速度。
- 问题1:有没有比这种循环更快的正则表达式?
- 问题 2:通过切换到更快的编译语言来加快速度是否有意义?(我正在尝试理解 Dlang)
[1] 因为它是 DNA 序列并且要搜索的输入是 FASTQ 格式,所以我使用 fqgrep:https ://github.com/indraniel/fqgrep 和 tre 库:https ://github.com/laurikari/tre/
edit_1 变化示例(缩短模式)。仅显示前几个步骤/较短的模式:
或者,如果您更喜欢它作为 DNA:
edit_2 简单的 grep 并没有真正削减它。我需要对 FASTQ 格式的每 4 行进行后处理,其中只有第 2 行匹配。如果我不使用 fqgrep,那么我必须:
读取 4 行输入
- 检查第 2 行(序列)是否以 20 种模式(P30-P10)中的任何一种开始
- 如果匹配,我需要删除第 2 行和第 2 行的前 N 个字符4,其中 N 代表匹配模式的长度 - 在输出时打印输出/写入文件行 #1-$4 在不匹配时什么也不做
对于内部解决方案,我可以尝试使用 GNU 并行将输入文件拆分为 4M 的谎言块,并以这种方式加快速度。但是,如果我想让每个新软件都能被其他人使用,我会要求最终用户安装广告,使其更加复杂。
** 编辑 3 ** 来自 Vyctor 的正则表达式和匹配行的简单示例:
我从左侧删除字符/DNA 碱基(或 DNA 中的 5 个素数末端),因为这是这些序列被真正的酶降解的方式。一旦被发现,正则表达式序列本身就没有意义了。所需的输出是正则表达式之后的读取序列。在上面的例子中,它是大写的,然后可以在下一步中映射到基因组。应该强调的是,除了这个玩具示例之外,我正在变得更长,在正则表达式模式之后,先验未知和变化的序列。在现实世界中,我不必处理 DNA 的大写/小写字符(一切都是大写的),但我可能会在我正在搜索模式的序列中遇到 Ns(= 未知 DNA 碱基)。这些可以在第一次近似中忽略,但对于更敏感的算法版本,可能应该作为简单的不匹配处理。在理想情况下,我们不会计算给定位置的简单错配,而是考虑存储在以 FASTQ 格式存储的每 4 行长序列记录的第 4 行中的 DNA 序列质量值来计算更复杂的惩罚:http://en.wikipedia.org/wiki/FASTQ_format#Quality
但这要复杂得多,到目前为止,“仅读取与正则表达式完全匹配的读取”的方法已经足够好,并且使后续步骤更易于分析。
regex - sed 在两个匹配之间打印,并替换为信息
我想从多个文件的一行中获取一个 ID,然后在使用 sed 之前和之后添加一些信息——我不想使用其他任何东西。例如,原始行如下所示:
我想打印:
到目前为止,我有:
第一个替换有效,但第二部分无效。如果我添加星号,它不会替换行尾,但单个句号只会替换一个字母。如果你能告诉我为什么,以及如何解决这个问题。