LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 638|回复: 1

脚本求助:如何提取特定位置字符

[复制链接]
发表于 2010-4-5 10:28:48 | 显示全部楼层 |阅读模式
cat -A file1 file2
#文件file1:
>entryAB 0 0 0 3 159$
AAGCAGTGGTATCAACGCAGAGTACGCGGGGGCCGACCCCCATCATCTCG$
CTCCCGCTCTCACGCACACCGACACCGCCACCGCCACCGCCGACGCCGCC$
ATTTTCTCCATTTATAGACGGGAAACCTCCTCTCCGCTCTCCCTCATCGA$
CCGACGCCA$
>entryXY 0 0 0 8 98$
AAGCAGTGGTATCAACGCAGAGTACGCGGGATAGTTACAATCTGTGTCAC$
AATTGTCGGTACTTATTTCTTGCTGAATGCTGAGAACTATCATTGACAAT$
。。。省略。。。
#文件file2:
>entryAB$
37 37 37 37 37 37 37 37 40 40 40 40 40 40 40 40 40 $
40 40 40 40 40 40 40 40 40 40 35 33 33 33 33 37 37 $
37 37 26 26 28 30 30 38 37 37 37 37 37 37 37 37 37 $
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 $
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 $
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 38 $
38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 $
37 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 $
37 37 37 37 34 34 34 37 37 37 37 37 37 37 37 37 37 $
37 37 37 37 37 37 $
>entryXY$
37 40 40 40 40 40 40 37 40 40 40 40 40 40 40 40 40 $
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 $
40 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 $
37 33 34 34 38 38 37 37 37 37 37 37 37 37 37 37 37 $
。。。。省略。。。。

现在我想根据>entryAB 0 0 0 3 159这一行最后两个数字n1和n2,从下一行开始取出第n1到第n2的字符串(不包括换行符$),输出文件成file1cliped
>entryAB n1 n2
GCAGTGGTATCAACGCAGA。。。到第n2个字符
>entryXY n3 n4
n3-n4个字符。。。

file2中的各个数字对应file1中的一个字符,每个数字后都有空格隔开
修改后的file2cliped中也相应的剪切出第n1到第n2个的数值。

刚开始学shell,只接触过一点grep、tr、cut之类的皮毛。
想用脚本处理,希望大家指导指导。
发表于 2010-4-5 18:22:32 | 显示全部楼层
1)
awk1:
BEGIN{FS="[ $]"}
/entry/{min=$5;length=$6-$5+1;print $0}
~/entry/{print substr($0,$min,length)}
nawk -f awk1 file1> file1cliped
2)
paste file1 file2 >file3
awk2:
BGEIN{FS="[ $]"}
/entry/{min=$5;length=$6-$5+1;print $1}
~/entry/{for(i=3;i<=NF-2;i++)print substr($1,$i,1)}
nawk  -f awk2 file3>file4
nawk -f awk1 file4>file2cliped
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表