+ -
当前位置:首页 → 问答吧 → 序列切割

序列切割

时间:2011-03-29

来源:互联网

input file:

>A
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2FI
>B
MTQ122NNG2N1HG2GHV1F
>C
XX

output file

MLCDSSESVSFSSIS1
MLCDSSESVSFSSIS1EEDTPIA2
EEDTPIA2
EEDTPIA2LL1
LL1
LL1NA1
NA1
NA1ETPDH2
ETPDH2
ETPDHFI
FI
MTQ1
MTQ12
2
22
2
2NNG2
NNG2
NNG2N1
N1
N1HG2
HG2
HG2GHV1
GHV1
GHV1F
F

A和B的序列中包含1和2,为切割点,切割方式为1或2的右边,可以有1个漏切。
输出的序列,如第一个,MLCDSSESVSFSSIS1
漏切的情况:MLCDSSESVSFSSIS1EEDTPIA2

切割到最后一段也输出,如FI.

下面是我代码,写的有点复杂,大家应该还有更简便的方法,请赐教:)
  1. awk -v RS="[12]" '{if($0~/>/){m=m>t+1?m:t+1;{if(NR==1){a[++p"|"++t]=$NF RT} else {a[p"|"++t]=$1;t=1;++p;a[p"|"++t]=$NF RT}}}else {a[p"|"++t]=$1RT}}END{for (i=1;i<=p;i++) for(j=1;j<=m;j++)  {if(a[i"|"j])print a[i"|"j]; if(a[i"|"j+1])print a[i"|"j]a[i"|"j+1]}}'
复制代码

作者: yinyuemi   发布时间: 2011-03-29

太强了,,,
你哪来的这么蛋疼的题目啊。。。

作者: xiaopan3322   发布时间: 2011-03-29

回复 xiaopan3322


    工作需要,么得办法啊:em06:

作者: yinyuemi   发布时间: 2011-03-29

回复 yinyuemi


    还看不懂。
如何切割? 为什么结果不包含以下行
MLCDSSESVSFSSIS1EEDTPIA2LL1
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2
...

作者: blackold   发布时间: 2011-03-29

回复 blackold


   黑哥,好!
是这样的:
MLCDSSESVSFSSIS1EEDTPIA2LL1 # 漏切点为2
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1 # 漏切点为3
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2 # 漏切为4

漏切点不能超过1,所以不包含这些

作者: yinyuemi   发布时间: 2011-03-29



QUOTE:
input file:

>A
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2FI
>B
MTQ122NNG2N1HG2GHV1F
>C
XX

outp ...
yinyuemi 发表于 2011-03-29 12:29



参考看看....
# echo '>A
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2FI
>B
MTQ122NNG2N1HG2GHV1F
>C
XX' | perl -ne '{if(/^>[AB]/){chomp($_=<>);while(m/((\D+)?(\d)|\D+$)/g){if($c++==0){print "$1\n"}else{print"$o$1\n$1\n";}$o=$1}}}'
MLCDSSESVSFSSIS1
MLCDSSESVSFSSIS1EEDTPIA2
EEDTPIA2
EEDTPIA2LL1
LL1
LL1NA1
NA1
NA1ETPDH2
ETPDH2
ETPDH2FI
FI
FIMTQ1
MTQ1
MTQ12
2
22
2
2NNG2
NNG2
NNG2N1
N1
N1HG2
HG2
HG2GHV1
GHV1
GHV1F
F

作者: jason680   发布时间: 2011-03-29

热门下载

更多