序列切割
时间: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.
下面是我代码,写的有点复杂,大家应该还有更简便的方法,请赐教:)
复制代码
>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.
下面是我代码,写的有点复杂,大家应该还有更简便的方法,请赐教:)
- 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:
工作需要,么得办法啊:em06:
作者: yinyuemi 发布时间: 2011-03-29
回复 yinyuemi
还看不懂。
如何切割? 为什么结果不包含以下行
MLCDSSESVSFSSIS1EEDTPIA2LL1
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2
...
还看不懂。
如何切割? 为什么结果不包含以下行
MLCDSSESVSFSSIS1EEDTPIA2LL1
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2
...
作者: blackold 发布时间: 2011-03-29
回复 blackold
黑哥,好!
是这样的:
MLCDSSESVSFSSIS1EEDTPIA2LL1 # 漏切点为2
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1 # 漏切点为3
MLCDSSESVSFSSIS1EEDTPIA2LL1NA1ETPDH2 # 漏切为4
漏切点不能超过1,所以不包含这些
黑哥,好!
是这样的:
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
>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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28