2017-03-03 2 views
0

Ich habe diese Datei (+ 200k Zeilen):Erhalten n Zeilen in Folge mit Muster enden

##gff-version 2 
##source-version bepipred-1.0b 
##date 2017-03-02 
##Type Protein EgrG_000076200.1 
##Protein EgrG_000076200.1 cat seq.1.fsa 
##MSPRGCLLLLMLVVILGISIQWTEAQGHRSDGQAEEFAVAKEMEEEDDDDEGEDYDDDDEEEEKEVVANRESKLLKHCLNLQNALKEKMESVVNQMKDCSKILALA 
##end-Protein 
# seqname   source  feature  start end score N/A ? 
# --------------------------------------------------------------------------- 
EgrG_000076200.1  bepipred-1.0b epitope   1  1 0.920 . . M|E 
EgrG_000076200.1  bepipred-1.0b epitope   2  2 0.544 . . S|. 
EgrG_000076200.1  bepipred-1.0b epitope   3  3 -0.070 . . P|. 
EgrG_000076200.1  bepipred-1.0b epitope   12 12 -3.747 . . L|. 
EgrG_000076200.1  bepipred-1.0b epitope   13 13 -3.223 . . V|. 
EgrG_000076200.1  bepipred-1.0b epitope   14 14 -2.999 . . V|. 
EgrG_000076200.1  bepipred-1.0b epitope   15 15 -2.401 . . I|. 
EgrG_000076200.1  bepipred-1.0b epitope   16 16 -2.271 . . L|. 
EgrG_000076200.1  bepipred-1.0b epitope   17 17 -1.701 . . G|. 
EgrG_000076200.1  bepipred-1.0b epitope   18 18 -1.569 . . I|. 
EgrG_000076200.1  bepipred-1.0b epitope   19 19 -1.072 . . S|. 
EgrG_000076200.1  bepipred-1.0b epitope   20 20 -0.532 . . I|. 
EgrG_000076200.1  bepipred-1.0b epitope   21 21 -0.055 . . Q|. 
EgrG_000076200.1  bepipred-1.0b epitope   22 22 0.128 . . W|. 
EgrG_000076200.1  bepipred-1.0b epitope   23 23 0.553 . . T|. 
EgrG_000076200.1  bepipred-1.0b epitope   24 24 0.541 . . E|. 
EgrG_000076200.1  bepipred-1.0b epitope   25 25 0.923 . . A|E 
EgrG_000076200.1  bepipred-1.0b epitope   26 26 0.992 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   27 27 1.480 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   28 28 1.540 . . H|E 
EgrG_000076200.1  bepipred-1.0b epitope   29 29 1.564 . . R|E 
EgrG_000076200.1  bepipred-1.0b epitope   30 30 1.591 . . S|E 
EgrG_000076200.1  bepipred-1.0b epitope   31 31 1.582 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   32 32 1.599 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   33 33 1.280 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   34 34 1.101 . . A|E 
EgrG_000076200.1  bepipred-1.0b epitope   35 35 0.777 . . E|. 
EgrG_000076200.1  bepipred-1.0b epitope   36 36 0.516 . . E|. 
EgrG_000076200.1  bepipred-1.0b epitope   37 37 0.353 . . F|. 
EgrG_000076200.1  bepipred-1.0b epitope   38 38 0.273 . . A|. 
EgrG_000076200.1  bepipred-1.0b epitope   39 39 0.068 . . V|. 
EgrG_000076200.1  bepipred-1.0b epitope   40 40 0.086 . . A|. 
EgrG_000076200.1  bepipred-1.0b epitope   41 41 0.124 . . K|. 
EgrG_000076200.1  bepipred-1.0b epitope   42 42 0.648 . . E|. 
EgrG_000076200.1  bepipred-1.0b epitope   43 43 1.026 . . M|E 
EgrG_000076200.1  bepipred-1.0b epitope   44 44 1.520 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   45 45 1.842 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   46 46 2.132 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   47 47 2.271 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   48 48 2.605 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   49 49 2.669 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   50 50 2.778 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   51 51 2.544 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   52 52 2.506 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   53 53 2.464 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   54 54 2.464 . . D|E 
    ##Protein EgrG_000524000.1 cat seq.3.fsa 
##MATAQRLLTASLLLISVLIPLISARRPSYYVHGLKFSRPCENNTYDEMTGNFKCTVPTGAECFQLCQQYGCYEWSFSSFMPSTDMHVRDHFRCRCIQDICLYNYVRVRDRDYE 
##end-Protein 
# seqname   source  feature  start end score N/A ? 
# --------------------------------------------------------------------------- 
EgrG_000524000.1  bepipred-1.0b epitope   1  1 0.143 . . M|. 
EgrG_000524000.1  bepipred-1.0b epitope   2  2 0.068 . . A|. 
EgrG_000524000.1  bepipred-1.0b epitope   3  3 -0.340 . . T|. 
EgrG_000524000.1  bepipred-1.0b epitope   4  4 -0.654 . . A|. 
EgrG_000524000.1  bepipred-1.0b epitope   5  5 -0.563 . . Q|. 
EgrG_000524000.1  bepipred-1.0b epitope   6  6 -0.500 . . R|. 
EgrG_000524000.1  bepipred-1.0b epitope   7  7 -0.448 . . L|. 
EgrG_000524000.1  bepipred-1.0b epitope   8  8 -0.904 . . L|. 
EgrG_000524000.1  bepipred-1.0b epitope   41 41 1.129 . . E|E 
EgrG_000524000.1  bepipred-1.0b epitope   42 42 1.135 . . N|E 
EgrG_000524000.1  bepipred-1.0b epitope   43 43 1.223 . . N|E 
EgrG_000524000.1  bepipred-1.0b epitope   48 48 0.557 . . M|. 
EgrG_000524000.1  bepipred-1.0b epitope   49 49 0.415 . . T|. 
EgrG_000524000.1  bepipred-1.0b epitope   50 50 0.269 . . G|. 
EgrG_000524000.1  bepipred-1.0b epitope   51 51 0.188 . . N|. 
EgrG_000524000.1  bepipred-1.0b epitope   52 52 -0.024 . . F|. 
EgrG_000524000.1  bepipred-1.0b epitope   53 53 0.184 . . K|. 
EgrG_000524000.1  bepipred-1.0b epitope   54 54 0.280 . . C|. 

und so weiter

Ich brauche nur Linien wählen mit der Endung ‚| E‘, aber zumindest 6, dann fügen Sie ein Trennzeichen ein, wenn die nächste Zeile mit '|.' wie:

EgrG_000076200.1  bepipred-1.0b epitope   25 25 0.923 . . A|E 
EgrG_000076200.1  bepipred-1.0b epitope   26 26 0.992 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   27 27 1.480 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   28 28 1.540 . . H|E 
EgrG_000076200.1  bepipred-1.0b epitope   29 29 1.564 . . R|E 
EgrG_000076200.1  bepipred-1.0b epitope   30 30 1.591 . . S|E 
EgrG_000076200.1  bepipred-1.0b epitope   31 31 1.582 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   32 32 1.599 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   33 33 1.280 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   34 34 1.101 . . A|E 
----- 
EgrG_000094950.1  bepipred-1.0b epitope  146 146 1.277 . . I|E 
EgrG_000094950.1  bepipred-1.0b epitope  147 147 1.443 . . N|E 
EgrG_000094950.1  bepipred-1.0b epitope  148 148 1.593 . . G|E 
EgrG_000094950.1  bepipred-1.0b epitope  149 149 1.740 . . E|E 
EgrG_000094950.1  bepipred-1.0b epitope  150 150 1.752 . . D|E 
EgrG_000094950.1  bepipred-1.0b epitope  151 151 2.206 . . E|E 
EgrG_000094950.1  bepipred-1.0b epitope  152 152 2.243 . . E|E 
EgrG_000094950.1  bepipred-1.0b epitope  153 153 2.194 . . E|E 
EgrG_000094950.1  bepipred-1.0b epitope  154 154 1.840 . . A|E 
EgrG_000094950.1  bepipred-1.0b epitope  155 155 1.451 . . D|E 
EgrG_000094950.1  bepipred-1.0b epitope  156 156 1.298 . . E|E 

ich diese brauche, weil nach diesem Cluster endet mit der Auswahl '| E' Ich werde, wie viele Gruppen zu zählen hat (Gruppen = a sequence> = 6 '| E' in einer Reihe) I bekam für jede ID (ID = EgrG_ *)

ich es mit zu tun habe versucht: grep 'EgrG' bepipred_eg_es_final_rev.txt | sed '/^#/d;s/.*|\./-----/' | uniq hier ist ein Beispiel dafür, was ich habe:

----- 
EgrG_000076200.1  bepipred-1.0b epitope   1  1 0.920 . . M|E 
----- 
EgrG_000076200.1  bepipred-1.0b epitope   25 25 0.923 . . A|E 
EgrG_000076200.1  bepipred-1.0b epitope   26 26 0.992 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   27 27 1.480 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   28 28 1.540 . . H|E 
EgrG_000076200.1  bepipred-1.0b epitope   29 29 1.564 . . R|E 
EgrG_000076200.1  bepipred-1.0b epitope   30 30 1.591 . . S|E 
EgrG_000076200.1  bepipred-1.0b epitope   31 31 1.582 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   32 32 1.599 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   33 33 1.280 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   34 34 1.101 . . A|E 
----- 
EgrG_000076200.1  bepipred-1.0b epitope   43 43 1.026 . . M|E 
EgrG_000076200.1  bepipred-1.0b epitope   44 44 1.520 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   45 45 1.842 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   46 46 2.132 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   47 47 2.271 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   48 48 2.605 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   49 49 2.669 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   50 50 2.778 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   51 51 2.544 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   52 52 2.506 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   53 53 2.464 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   54 54 2.464 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   55 55 2.455 . . Y|E 
EgrG_000076200.1  bepipred-1.0b epitope   56 56 2.442 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   57 57 2.457 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   58 58 2.451 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   59 59 2.390 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   60 60 2.477 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   61 61 2.295 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   62 62 1.861 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   63 63 1.400 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   64 64 1.014 . . K|E 
----- 
EgrG_000131300.1  bepipred-1.0b epitope   37 37 0.984 . . N|E 
----- 

Die Sache ist, ich weiß nicht, wie um Gruppen loszuwerden, die weniger als 6 Zeilen enthalten und mit '| E' enden. Ich habe das auch mit Python versucht, aber ich habe fast das gleiche Ergebnis.

Btw, ich arbeite auf Linux Mint 18.1 und Ubuntu 16.04.

Ich hoffe, ich konnte es gut erklären.

Antwort

1

Zum Gruppieren können Sie awk verwenden.

A oneliner:

awk -F\| '$NF=="."{if(cont>=6){for (i=1;i<=cont;i++){print a[i]};print "-----"}cont=0;delete a;next}$NF=="E"{a[++cont]=$0}' yourfile 

mehrzeilige:

awk -F\| '$NF=="."{if(cont>=6){ 
         for (i=1;i<=cont;i++){ 
         print a[i] 
         } 
        print "-----" 
        } 
        cont=0 
        delete a 
        next} 
      $NF=="E"{a[++cont]=$0}' yourfile 

Ergebnisse

EgrG_000076200.1  bepipred-1.0b epitope   25 25 0.923 . . A|E 
EgrG_000076200.1  bepipred-1.0b epitope   26 26 0.992 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   27 27 1.480 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   28 28 1.540 . . H|E 
EgrG_000076200.1  bepipred-1.0b epitope   29 29 1.564 . . R|E 
EgrG_000076200.1  bepipred-1.0b epitope   30 30 1.591 . . S|E 
EgrG_000076200.1  bepipred-1.0b epitope   31 31 1.582 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   32 32 1.599 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   33 33 1.280 . . Q|E 
EgrG_000076200.1  bepipred-1.0b epitope   34 34 1.101 . . A|E 
----- 
EgrG_000076200.1  bepipred-1.0b epitope   43 43 1.026 . . M|E 
EgrG_000076200.1  bepipred-1.0b epitope   44 44 1.520 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   45 45 1.842 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   46 46 2.132 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   47 47 2.271 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   48 48 2.605 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   49 49 2.669 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   50 50 2.778 . . D|E 
EgrG_000076200.1  bepipred-1.0b epitope   51 51 2.544 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   52 52 2.506 . . G|E 
EgrG_000076200.1  bepipred-1.0b epitope   53 53 2.464 . . E|E 
EgrG_000076200.1  bepipred-1.0b epitope   54 54 2.464 . . D|E 
----- 

Erklärung

-F\|: um das F Feld S eparator auf | zu setzen.


$NF==".": wenn das letzte Feld ist ein Punkt .:

  • lesen couter früherer E Wiederholungen (in einer Reihe), wenn sie größer oder gleich 6 Verwendung einer for-Schleife um den Inhalt des Arrays a zu drucken, das zum Speichern der mit E geendeten Datensätze verwendet wird.

    Schließlich drucken wir den Separator ------

  • Für alle . Vorkommen, Initialisieren der Zähler cont, löschen Sie die a Array und next Datensatz wechseln.


$NF=="E"{a[++cont]=$0}: Beim letzten Feld der Inhalt des Datensatzes zu E gleich $0 in a Array durch eine Auto-Inkrement-Zähler indiziert gespeichert ++cont, die die Anzahl von Datensätzen nacheinander E erschienen hält.

+0

Danke, @klashxx Es hat mir sehr geholfen. Würde es mir etwas ausmachen, mir die Eigenschaften dieses awk-Codes zu erklären? Wie, warum/was ist 'i = 1; i ++ ', usw. Vielen Dank im Voraus. –

+0

Natürlich @TiagoMinuzzi, fertig xP – klashxx

Verwandte Themen