-2

Я хочу grep несколько слов в file1, и использовать каждое слово, чтобы grep, что следует после его соответствия в file2. И затем я хочу добавить строку, которая следует за соответствием, к слову, которое я использовал, в file03, чтобы file03 содержал

word1 [the thing that was found using word1 in a grep in file2]
word2 [the thing that was found using word1 in a grep in file2]

Часть файлов, которые у меня есть: file1:

JAN1319964: PGSC|PGSC0003DMP400068385_PGSC0003DMT400096710  PGSC|PGSC0003DMP400062633_PGSC0003DMT400090958 PGSC|PGSC0003DMP400066271_PGSC0003DMT400094596 PGSC|PGSC0003DMP400064671_PGSC0003DMT400092996 PGSC|PGSC0003DMP400068967_PGSC0003DMT400097292
JAN1327159: PGSC|PGSC0003DMP400016823_PGSC0003DMT400024599 PGSC|PGSC0003DMP400017933_PGSC0003DMT400026257 Dul|Dul_comp58749_c0_seq2-1
JAN1330513: Des|Des_g36886.t1 PGSC|PGSC0003DMP400049952_PGSC0003DMT400073802

File2:

>Dul|Dul_g997.t1
ESECRVQYFSDDEVSPVTEVTGRRGSICVVCRLVPKASVSESSFLK
>Dul|Dul_g998.t1
MDDKRLWEEEERRRIAVRQREERGKIYERQKALEEQEKLAAIESYQDAIRREREEEERLKEKKKKKKKTEIRDDYLDDFLPRRNDRRIPDRDRSVKRRQTFESGRHAKEHAPPTKRRRGGEVGLSNILEEIVDTLKNNVNVSYLFLKPVTRKEAPDYHKYVKRPMDLSTIKERARKLEYKNRGQFRHDVAQITINAHLYNDGRNPGIPPLADQLLEICDYLLEENESILAEAESAI
>Dul|Dul_g999.t1
MDDKRLWEEEERRRIAVRQREERGKIYERQKALEEQEKLAAIESYQDAIRREREEEERLKEKKKKKKKTEIRDDYLDDFLPRRNDRRIPDRDRSVKRRQTFESGRHAKEHAPPTKRRRGGEVGLSNILEEIVDTLKNNVNVSYLFLKPVTRKEAPDYHKYVKRPMDLSTIKERARKLEYKNRGQFRHDVAQITINAHLYNDGRNPGIPPLADQLLEICDYLLEENESILAEAESGIEQ
>Des|Des_g1.t1
FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK

Вывод, который я хочу, для этого примера:

JAN1319964: PGSC|PGSC0003DMP400068385_PGSC0003DMT400096710 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
PGSC|PGSC0003DMP400062633_PGSC0003DMT400090958 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
PGSC|PGSC0003DMP400066271_PGSC0003DMT400094596 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
PGSC|PGSC0003DMP400064671_PGSC0003DMT400092996 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
PGSC|PGSC0003DMP400068967_PGSC0003DMT400097292  [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
JAN1327159: PGSC|PGSC0003DMP400016823_PGSC0003DMT400024599 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
PGSC|PGSC0003DMP400017933_PGSC0003DMT400026257 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
Dul|Dul_comp58749_c0_seq2-1
JAN1330513: Des|Des_g36886.t1  [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK
PGSC|PGSC0003DMP400049952_PGSC0003DMT400073802 [the line after the match to this name]: FRKQTVELSESDDTSISVETEDAEIENGNSPPAGLSNTTKVQLKPLYRSTIQLTPHPDGLSNTNEIK

Как вы можете видеть, у меня просто отсутствует некоторая информация в файле file1, которая содержится в файле file2 и должна быть добавлена в файл file1. Если кто-нибудь знает, как это сделать, я буду очень признателен!

1 ответ1

0

Я не совсем понимаю ваш вопрос, поэтому я отвечу на то, что, по вашему мнению, вы спрашиваете. Если у вас есть файл идентификаторов, представляющих интерес, как этот (я предполагаю, что первое поле никогда не является идентификатором, я также предполагаю, что по крайней мере некоторые из идентификаторов присутствуют в файле последовательности, ни один из ваших примеров не является):

Jan12345: ID1 ID2 ... IDN1
Jan67899: ID11 ID12 ... IDN2

И файл Fasta, как это:

>ID1
ABCDEFG
>ID2
HIJKLMN
>IDN1
OPQRSTU
>ID11
WXYZABC
>ID12
DEFGHIJ
>IDN2
KLMNOPQ

И вы хотите выходной файл, как это:

Jan12345 ID1 ABCDEFG ID2 HIJKLMN ... IDN OPQRSTU

Вы могли бы сделать что-то вроде этого:

  1. Сохраните этот скрипт как FastaToTbl и сделайте его исполняемым (chmod 744 FastaToTbl):

    #! /bin/sh
    gawk '{
            if (substr($1,1,1)==">")
           if (NR>1)
                 printf "\n%s\t", substr($0,2,length($0)-1)
          else 
             printf "%s\t", substr($0,2,length($0)-1)
           else 
              printf "%s", $0
    }END{printf "\n"}'  "$@"
    

    Это преобразует FASTA в табличный формат (ID<TAB>SEQUENCE).

  2. Используйте FastaToTbl сочетании с этим сценарием, чтобы извлечь идентификаторы из file1 и последовательности из file2:

    FastaToTbl file2 | 
      perl -ne 'chomp;@a=split(/\t/); $k{$a[0]}=$a[1]; ## Collect the sequences
                                                       ## $k{ID}=SEQUENCE
          END{open(A,"file1");   ## Open ID file
             while(<A>){         ## and process it line by line
               @a=split(/\s+/);  ## Gather the IDs in array @a
               print shift(@a);  ## Print the first element (Jan123:)
               print " $_ $k{$_}" for @a; ## Print each ID and its seq
               print "\n";
     }}' 
    Jan12345:ID1 ABCDEFG ID2 HIJKLMN IDN1 OPQRSTU
    Jan67899:ID11 WXYZABC ID12 DEFGHIJ IDN2 KLMNOPQ
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .