У меня есть файл 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
первый столбец и извлекает эти идентификаторы последовательности (= первый столбец $1
) плюс последовательность, а затем из самой последовательности все, кроме тех позиций между $7
и $8
из файла 1.fasta
, то есть из первых двух соответствует результату будет
>1
ACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>27620
GTAGATAGAGATAGAGAGAGAGAGGGGGGAGA
...
(обратите внимание, что первые три записи из >1
не входят в эту последовательность)
Идентификаторы идут последовательно, что означает, что я могу извлечь необходимую информацию следующим образом:
awk '{print 2*$1-1, 2*$1, $7, $8}' 1.blast
Это дает мне матрицу, которая содержит в первом столбце правую строку идентификатора последовательности, во втором столбце правильную строку последовательности (= одну после строки идентификатора), а затем две координаты, которые следует исключить. Таким образом, в основном матрица, содержащая всю необходимую информацию, какие элементы из 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)
, которая удаляет все между этими двумя позициями из заданной строки, но я думаю, что я мог бы сделать это в собственном скрипте. Особенно правильная трубка здесь для меня проблема.