我有一个1.blast
像这样的坐标信息的文件
1 gnl|BL_ORD_ID|0 100.00 33 0 0 1 3
27620 gnl|BL_ORD_ID|0 95.65 46 2 0 1 46
35296 gnl|BL_ORD_ID|0 90.91 44 4 0 3 46
35973 gnl|BL_ORD_ID|0 100.00 45 0 0 1 45
41219 gnl|BL_ORD_ID|0 100.00 27 0 0 1 27
46914 gnl|BL_ORD_ID|0 100.00 45 0 0 1 45
和一个1.fasta
像这样的序列信息的文件
>1
TCGACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>2
GCATCTGGGCTACGGGATCAGCTAGGCGATGCGAC
...
>100000
TTTGCGAGCGCGAAGCGACGACGAGCAGCAGCGACTCTAGCTACTG
我现在正在搜索一个脚本,该脚本从1.blast
第一列提取并提取那些序列 ID(=第一列$1
)加上序列,然后从序列本身中提取除了文件之间和文件中的位置之外的所有位置,$7
这意味着从前两个匹配输出将是$8
1.fasta
>1
ACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>27620
GTAGATAGAGATAGAGAGAGAGAGGGGGGAGA
...
(请注意,前三个条目>1
不在此序列中)
ID 是连续的,这意味着我可以像这样提取所需的信息:
awk '{print 2*$1-1, 2*$1, $7, $8}' 1.blast
这给了我一个矩阵,它在第一列中包含正确的序列标识符行,在第二列中包含正确的序列行(= ID 行之后的一个),然后是应该排除的两个坐标。所以基本上一个矩阵包含所有需要的信息,1.fasta
应该从中提取元素
不幸的是,我没有太多的脚本编写经验,因此我现在有点迷茫,如何在合适的sed
命令中输入值?我可以得到这样的特定行:
sed -n 3,4p 1.fasta
以及我想删除的字符串,例如通过
sed -n 5p 1.fasta | awk '{print substr($0,2,5)}'
但我现在的问题是,如何将第一次awk
调用的信息通过管道传输到其他命令中,以便它们提取正确的行并从序列行中删除,然后是给定的坐标。所以,substr
这不是正确的命令,我需要一个remstr(string,start,stop)
从给定字符串中删除这两个位置之间的所有内容的命令,但我认为我可以在自己的脚本中执行此操作。特别是正确的管道对我来说是个问题。