将括号内容拆分为新列

Splitting bracket content into new columns

我一整天都在尝试提取和拆分这个括号内容,但我就是做不到。 我已经尝试使用 sed 和 tr 将 '[]' 替换为 \t,并逐步执行,但一点运气都没有。

tr '[''\t'`

甚至一个朋友也尝试过 vi,但它太复杂了,没有用:

:%s/\([A-Za-z_]*\)\t\([0-9A-Z-]*\)\t\([0-9]*\)\t[A-Z]*\[\(.\).\(.\)\][A-Z]*\t+\([a-z0-9]*\)\t/\t\t\t\t\t\t/g

也试过 python 但它说要解压的值太多

一定是括号或类似问题。 所以,我有这个 table 但包含数十万行

Species X-C982  282 AACTGTCCATTGACTCTGATAGTGTAAC[G/A]GAGGAAGATGTGCCTAAAAGGAAGAA scaffold7
Species X-A757  158 CCAAGACAGACAGTGGGGTAGAATTTAC[T/C]ACAACAGGCAGTCACAGTGACAAAGG scaffold7
Species X-G39   842 TGATGAACATCAGACTTTTAAACTTTGC[T/C]CATGCATAAATCTGTATATCACGCTA scaffold9

我需要提取内容并将其从“/”中拆分出来,这样它看起来像这样(所有制表符分开):

Species X-C982  282  G  A  scaffold7
Species X-A757  158  T  C  scaffold7
Species X-G39   842  T  C  scaffold9

很抱歉没有发布任何好的代码,但其中 none 可以正常工作。

我知道这在 excel 中可以很容易地完成,但是当有时处理超过一百万行时,这是不可能的。 提前致谢

$ awk -F'[][[:space:]/]+' -v OFS='\t' '{print , , , , , }' file
Species X-C982  282     G       A       scaffold7
Species X-A757  158     T       C       scaffold7
Species X-G39   842     T       C       scaffold9

如果您将来要执行更多的文本操作任务,请阅读 Arnold Robbins 撰写的 Effective Awk Programming,第 4 版。

使用 awk,您可以像这样定义字段分隔符:

awk -F'[] ][ACTG]*[[ ]|/' '=' file

如果对核苷酸序列中“[X/Y]”的出现次数有任何疑问,那么最好检查一下。

假设输入以制表符分隔,$3 是长核苷酸序列,下面说明了可以做什么:

 awk -F\t '
   BEGIN{OFS=FS}
    ~ /\[/ { split(, a, "[][/]"); print ,,a[2],a[3],; next}
   {print ,,"","",} '