更改字词

时间:2016-08-04 22:52:10

标签: string awk replace sed

我的文件有多个行,如下所示,每个种类的标题都以'>'开头

>gi|398852808|ref|NZ_AKJD01000108.1| Pseudomonas sp. GM80 PMI37_contig126.126, whole genome shotgun sequence
CCGCAGGCTGCGATCTTTTGATGTTGTTTTTTTAAGATCAAGATCAAAAGATCGCAGCCTTCGGCAGCTCCTACAGGTGG
TCGTGGGTTTAAGCCGCTCAATCCAGTAAACTGCGGCACGTTTTTCTCTAAGTAGTGTTTTCCCCATGCAAATTGCTCTG
GCGCCCATGGAGGGGTTGGTCGACGACATCCTCCGCGACGTGCTGACCCGCGTTGGCGGCATCGATTGGTGCGTGACTGA
ATTCATTCGGGTCAACGATCAGTTGCTCACCCCGGCTTACTTCCACAAGTTCGGCCCCGAGCTGCTCAACGGTGCCCGCA
CGGCGTCCGGCGTGCCATTGCGTGTGCAATTGCTCGGTTCCGACCCGGTGTGCCTGGCGGAAAACGCTGCACTGGCCTGC

我想找到标题并将其更改为

>NZ_AKJD01000108.1|kraken:taxid|398852808 Pseudomonas sp. A3(2016), complete genome
CGCGATGGTCGTTAACGAAAACGCATGCTTACTGGCTAAACGCGGCGCTCTTGACTCCAT
CGCGAGCAAGCTCGCTCCTACAGAAGAAAGCGGCGCTCTAGTGCGCCTCATCCCAGTTAT
TGCCTACCCCCACCTCGACCAGCAGCGGCACATCCAGTTGCGCGGCCCCGCTCATGTGCA

不改变文件的结构。

我试过这个 awk -v repl =“> kraken:taxid | $ ID |” '{gsub(/ ^> /,repl,$ 0);打印$ 0}'$ FILE

我可以移动单词,但无法移除或获得所需的结果。

谢谢

1 个答案:

答案 0 :(得分:0)

据我所知,你想重新排列标题行上的字段:

 1  >gi
 2  398852808
 3  ref
 4  NZ_AKJD01000108.1
 5   Pseudomonas sp. GM80 PMI37_contig126.126, whole genome shotgun sequence

 1  >NZ_AKJD01000108.1
 2  kraken:taxid
 3  398852808 Pseudomonas sp. A3(2016), complete genome

你需要的awk大致是这样的:

BEGIN { FS = "[|]" }

/^>/ {
     OFS = "|"

     split($5, words, / /)
     Pseudomonas = " " words[1] " " words[2] " " "A3(2016), complete genome"

     print ">" $4, "kraken:taxid", $2  Pseudomonas
     next
}

{ print }

我的猜测是,某些输出文字实际上是对输入进行分类或重命名的查找。如果是这样,您可能希望在处理基因组文件之前为它们(来自其他输入文件)构建关联数组。

HTH。