【问题标题】:Change position of words改变单词的位置
【发布时间】:2016-12-11 05:47:22
【问题描述】:

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

>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

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

谢谢

【问题讨论】:

  • edit 你的问题来解释你想要进行的转换。现在您的输入和输出看起来像 2 个部分重叠但不相关的文本块。例如,A3(2016) 是从哪里来的?为什么你的输出缩小了 2 行?为什么CCG... 变成了CGC...?等等……

标签: string awk replace sed


【解决方案1】:

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

 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多