将括号内容拆分为新列
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 ,,"","",} '
我一整天都在尝试提取和拆分这个括号内容,但我就是做不到。 我已经尝试使用 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 ,,"","",} '