gpt4 book ai didi

awk - 如果与另一个 file.txt 匹配,则替换文件 (fasta) 中的 header

转载 作者:行者123 更新时间:2023-12-03 08:05:43 28 4
gpt4 key购买 nike

我有一个文件 Pseudo.fasta,如下所示

>Pseudomonas_brassicacearum_51MFCVI2.1_ABFDHLDI_02438
AATCGCAATTTGCCCAAA
>Pseudomonas_brassicacearum_51MFCVI2.1_ABFDHLDI_03705
GATCCTTAACGGA
>Pseudomonas_brassicacearum_PP1_210F_EGEGDKLG_01471
AGGCCTTAAACCTT

另一个包含两列的 file.txt:第一列与 .fasta 文件的标题部分匹配,第二列和文件如下所示。

Pseudomonas_brassicacearum_51MFCVI2.1   JW5VryPcbM
Pseudomonas_brassicacearum_51MFCVI2.1 JW5VryPcbM
Pseudomonas_brassicacearum_PP1_210F nxUvzhi39L

基本上,如果第一个文件的第一列与 fasta 标题的(第一部分)匹配,我想用第二个文件的第二列替换标题。

所需的输出应如下所示

>JW5VryPcbM_1
AATCGCAATTTGCCCAAA
>JW5VryPcbM_2
GATCCTTAACGGA
>nxUvzhi39L_1
AGGCCTTAAACCTT

我试图用 awk 来做到这一点

awk -F "\t" 'FNR==NR {f2[$1]=$2;next} $2 in f2 {$2=f2[$2]}1' file.txt FS='>' OFS='>' Pseudomo.fasta 

但只有当要匹配的字符串完全相同时,此解决方案才有效。

此后,我将应用此 awk 行添加一个数字,以防标题中出现重复项

awk '{print $0 (/^>/ ? "_" (++c[$1]) : "")}' Pseudo.fasta

如果可以直接用上一个命令来传输最后一个命令,那也很酷。有什么建议吗?谢谢!

最佳答案

您可以使用这个awk:

awk '
NR == FNR {
map[">" $1] = $2
next
}
sub(/(_[^_]+){2}$/, "") && $0 in map {
$0 = ">" map[$0] "_" ++freq[map[$0]]
} 1' file.txt Pseudo.fasta

>JW5VryPcbM_1
AATCGCAATTTGCCCAAA
>JW5VryPcbM_2
GATCCTTAACGGA
>nxUvzhi39L_1
AGGCCTTAAACCTT

关于awk - 如果与另一个 file.txt 匹配,则替换文件 (fasta) 中的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72437700/

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