我一直在努力让这个括号内容被提取和拆分,但我不能完成它。 我尝试用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/\1\t\2\t\3\t\4\t\5\t\6\t\7/g
还尝试使用python,但它说要解压缩的值太多了
它必须是括号或类似的问题。 所以,我有这个表,但包含数十万行
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
很抱歉没有发布任何好的代码,但没有一个正常工作。
我知道在excel中这可以很容易地完成,但是当有时使用超过一百万行时,这是不可能的。 提前致谢
答案 0 :(得分:3)
$ awk -F'[][[:space:]/]+' -v OFS='\t' '{print $1, $2, $3, $5, $6, $8}' 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,4th Edition一书。
答案 1 :(得分:1)
使用awk,您可以像这样定义字段分隔符:
awk -F'[] ][ACTG]*[[ ]|/' '$1=$1' file
答案 2 :(得分:0)
如果对" [X / Y]"的发生次数有任何疑问?可能在核苷酸序列中,那么检查可能会更好。
假设输入以制表符分隔,其中$ 3是长核苷酸序列,下面说明可以做什么:
awk -F\\t '
BEGIN{OFS=FS}
$3 ~ /\[/ { split($3, a, "[][/]"); print $1,$2,a[2],a[3],$4; next}
{print $1,$2,"","",$4} '