Підкажіть слово в одному файлі, і використовуйте це слово для відповідності іншому файлу, додавши те, що слідує за відповідним


-2

Я хочу grep кілька слів у файлі1, і використовувати кожне слово, щоб grep, що слід після його відповідності в файлі2. І тоді я хочу додати рядок, що слідував за відповідним словом, я використав у файлі03, так що файл03 містить

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

Як ви бачите, я просто маю деяку інформацію, яка відсутня у файлі1, який міститься у файлі2 і має бути додано до файлу1. Якщо хтось знає, як це зробити, я б дуже ціную це!


Я не розумію, перша лінія вашого file1 не має ідентифікаторів, які є в файлі FASTA2, для чого ви хочете grep? Ви намагаєтеся перетворити FASTA на tbl ?
terdon

Відповіді:


0

Я не дуже розумію ваше питання, тому я відповім, що я думаю ви запитуєте. Якщо у вас є файл ідентифікаторів, що представляють інтерес, як це (припускаю, що перше поле ніколи не є ідентифікатором, я також припускаю, що принаймні деякі з ідентифікаторів присутні в файлі послідовності, жоден з них не є вашим прикладом):

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

І файл Фаста такий:

>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 на tbl , ( 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
    

Я спробував це (протягом досить довгого часу), хоча чомусь перший (FastaToTbl) скрипт не відділяв "Jan ..." від інших з (tab), але з нормальним простором.
Stenemo

Крім того, я не зовсім впевнений, але після додавання вкладки, я до сих пір не отримую послідовності в моєму виході (останні 5 рядків виглядає так: PGSC | PGSC0003DMP400049952_PGSC0003DMT400073802 SWtf | SW_g16502.t1
Stenemo

@Stenemo FastaToTbl слід запускати на файлі FASTA. У моєму прикладі file2 є файлом fasta і file1 є ідентифікатором.
terdon

Гаразд, зараз він працює, дякую вам за вашу допомогу!
Stenemo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.