我正在使用 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,但这对资源来说非常昂贵并且无法执行。
非常感谢所有帮助。预先感谢。
您可以尝试这个
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