从文件中查找正确的行并使用它们创建新文件

问题描述 投票:0回答:1

我正在使用 Bash(对我来说非常陌生)。我有 2 个源文件。

其中一个(名称:clusters.txt)如下所示:

Cluster 10: WP_1.2 WP_1.1 WP_1.4 ......

Cluster 15: WP_2.1 WP_1.4 WP_1.3 ......

简而言之,每一行对应一个簇,该簇具有一系列 ID(每个 ID 看起来像 XY_123.4)。

第二个文件(名称:sequence.fasta)如下所示:

>WP_1.1 some dummy text...

>WP_1.2 some more text...

>WP_1.3 some more text...

>WP_1.4 some more text...

>WP_2.1 some more text...

>WP_2.2 some more text...

简而言之,每行以“>”符号开头表示它是一个序列。

我需要做的是获取“集群”的每个“序列”并用它们创建一个单独的 fasta 文件。例如,对于集群 10,我需要创建:

>WP_1.1 some dummy text...

>WP_1.2 some more text...

>WP_1.4 some more text...

我尝试在循环中使用 grep,但这对资源来说非常昂贵并且无法执行。

非常感谢所有帮助。预先感谢。

r bash bioinformatics fasta
1个回答
0
投票

您可以尝试这个

awk
脚本

#! /usr/bin/awk -f

BEGIN { FS=": " }
{ gsub(" ", "_", $1); gsub(" ", "|", $2); system("/usr/bin/awk '/" $2 "/' sequences.fasta >" $1) }

假设

clusters.txt
中有合理数量的行,因为这会为每一行调用一个新的
awk

chmod +x myscript
./myscript clusters.txt
© www.soinside.com 2019 - 2024. All rights reserved.