gpt4 book ai didi

bash - 将 FASTA 文件中的数值替换为不同文件中的索引。 (首选 Bash)

转载 作者:行者123 更新时间:2023-12-03 07:55:24 25 4
gpt4 key购买 nike

我有一个充满 fasta 文件的文件夹,其格式如下(依此类推),其中以 > 开头的行是 DNA 序列的读取名称,接下来的行是序列本身。整个文件重复此模式:

> 887_ENCFF899MTI.fastq.gz_seq1
GGCCCGCCTCCCGTCGGCCGGTGCGAGCGGCTCCGCGA
> 55_ENCFF899MTI.fastq.gz_seq2
GGGGGGGGCGTCTCGCGCAAACGTCCATAAC
> ...
...

在读取名称中,[887] 对应于我用来查找此读取的查询序列的索引,存储在不同的文件中(例如 SequenceNames.txt)。可以假设另一个文件具有以下格式:

SequenceA
SequenceB
...

我只想将 > 和 _ 之间的数字(避免与文件名偶然匹配)替换为与 SequenceNames 文件中该数字的索引相匹配的序列。例如,我想要

> 1_ENCFF899MTI.fastq.gz_seq1
ACTATC
> 2_ENCFF899MTI.fastq.gz_seq1

成为

> SequenceA_ENCFF899MTI.fastq.gz_seq1
> SequenceB_ENCFF899MTI.fastq.gz_seq1

我通常能够进行这些替换,但我真的不确定如何将索引替换专门定向到 > 和 _ 之间的位置/正则表达式匹配,而不执行这些数字的文件范围字典替换,并且我正在努力使用 awk 数组索引来获得类似的内容

gawk '{print gensub(/^> ([0-9]*)_/,array[pattern],"\\1")}'

生产我正在寻找的东西。

最佳答案

使用 gawk:

awk 'NR==FNR{ar["> "NR"_"]=$0} 
NR>FNR{match($0,/^> [0-9]+_/,m); gsub(/^> [0-9]+_/, "> " ar[m[0]]"_", $0);print} ' SequenceNames.txt matches.fasta

NR==FNR block 从序列名称文件中收集行数据,并将其存储在一个数组中,该数组由由“">”、行号和尾随“_”字符构建的字符串进行索引。

NR>FNR block 将与需要行开头 ">"的正则表达式匹配的字符串存储在数组 m 中,后跟空格、数字和下划线>。然后使用 Gsub 将匹配项替换为序列名称数组中保存的相应值。

使用 GNU Awk 5.1.0 进行测试

关于bash - 将 FASTA 文件中的数值替换为不同文件中的索引。 (首选 Bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76186210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com