Mit perl textdatei erstellen

Hallo,

ich habe ein gff file (eine textdatei in der Bioinformatik) und möchte diese mit einem Perl Skript erstellen da es in einem bestimmten Schema vorliegt und es lange dauert es per Hand zu erstellen. Die Zeilen sehen so aus:

NC_010109.1 NTRFinder nested_tandem_repeat 790 2342 . . . ID=NTR-a
NC_010109.1 NTRFinder motif_small_b 790 800 . . . ID=NTR-a1:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_b
NC_010109.1 NTRFinder motif_small_a 812 822 . . . ID=NTR-a2:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_a
NC_010109.1 NTRFinder motif_small_h 823 833 . . . ID=NTR-a3:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_a
NC_010109.1 NTRFinder motif_tall_a 834 881 . . . ID=NTR-a4:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_tall_a
NC_010109.1 NTRFinder motif_small_a 882 892 . . . ID=NTR-a5:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_a
NC_010109.1 NTRFinder motif_small_b 893 903 . . . ID=NTR-a6:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_b
NC_010109.1 NTRFinder motif_small_a 904 914 . . . ID=NTR-a7:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_a
NC_010109.1 NTRFinder motif_tall_b 915 962 . . . ID=NTR-a8:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_tall_b
NC_010109.1 NTRFinder motif_small_a 963 973 . . . ID=NTR-a9:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_a
NC_010109.1 NTRFinder motif_tall_c 974 1021 . . . ID=NTR-a10:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_tall_c

Also im Prinzip bekomme ich die Regionen für meine einzelnen Motive (motif_small_a) durch ein anderes script. Und die letzte Splate verändert sich fortlaufend (ID wird hochgezählt)

Vielleicht hat jemand eine Idee wie man das in Perl realisieren kann? Wäre für alles dankbar.

LG, Anja

Hallo,

Also im Prinzip bekomme ich die Regionen für meine einzelnen
Motive (motif_small_a) durch ein anderes script. Und die
letzte Splate verändert sich fortlaufend (ID wird hochgezählt)

Vielleicht hat jemand eine Idee wie man das in Perl
realisieren kann?

Du liest die Daten aus der Ausgabe des anderen Scripts aus, zählst eine Counter hoch, und schreibst die gewünschte Ausgabe in eine Datei.

An welcher Stelle hakts?

Grüße,
Moritz

Hi Moritz,

im Prinzip fehlt mir gerade die Idee wie ich meine einzelnen Spalten erstelle. An sich wäre es ja sinnvoll wenn der user den Inhalt übers Terminal eingeben kann (da es nicht immer der gleiche Inhalt sein wird). Die Begrenzung müsste ja dann durch die Ausgabe des anderen scripts und des counters gegeben sein…

LG,
Anja

Hallo anousch,

so wie es aussieht, willst die jede Zeile „splitten“.
Kann es sein, dass es sich um ein csv-datei handelt?
Sehe da „;“.

($Spalte1,$Spalte2,… ) = split(/;/, $Zeile)

Gruß
Klaus

Hallo Klaus,

ich weiß nicht was eine cvs-Datei ist, aber zwischen den einzelnen Spalten muss ein tab stehen

LG,
Anja

Hallo Anja,

ich weiß nicht was eine cvs-Datei ist, aber zwischen den
einzelnen Spalten muss ein tab stehen

eine csv = Comma Separated Values
also eine Textdatei, wo die einzelnen Felder (Spalten) durch Komma, Semikolon, Doppelpunkt oder sonst ein Zeichen getrennt sind. Kann auch ein Tabulator sein :smile:

In Perl erzeugt man ein Tab mit „\t“


NC_010109.1 NTRFinder motif_small_a 812 822 . . . ID=NTR-a2:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_a

Ist das eine Original-Zeile oder hast Du die Punkte als „Kürzung“ verwendet?
Wo sollen die Zeilen in Spalten aufgeteilt werden?

Gruß
Klaus

Also: Ein gff file besteht aus 9 spalten. wenn du genau hinsiehst kannst du sie erkennen. Die punkte sind auch jeder eine Spalte für sich (kennzeichnen ob die Region codiert ist oder nicht). Also hab ich mein NC_010109.1 NTRFinder motif_small_b 790 800 . . . ID=NTR-a1:stuck_out_tongue_winking_eye:arent=NTR-a;Name=motif_small_b
Ich weiß halt nicht wie ich die einzelnen Spalten erstellen soll da sich einige Spalten je nach Benutzer ändert. Das heißt sie müssen übers Termnal eingegeben werden

LG,
Anja

An sich bräuchte ich doch nur eine Eingabe für jede Spalte von dem user abfragen und dann in einer Schleife die Positionen hochzählen? Bzw die ID?

LG, Anja

also sind die Values mit einem Leerzeichen getrennt!
Das letzte Feld besteht aber aus einem komplexen Eintrag, der durch „;“ getrennt ist.

Es wäre hilfreich, wenn Du mal genau beschreiben könntest, was vorliegt und was geändert werden soll.
Also eine vorhandene Datenzeile und dann was geändert werden soll und wie es dann aussieht!!

Gruß
Klaus

auch hier wäre dann mit split die Datenzeile in ihre Felder aufzuteilen und die Values zur Edition bereitzustellen.
Welche Oberfläche?
Gruß
Klaus

Inwiefern geändert? Ich möchte einfach ein Skript schreiben das mir genau so eine Datei erstellt. Es ist sehr zeitaufwendig das file per Hand zu erstellen (hat meistens an die 100 zeilen), daher wäre es schön wenn man ein script hätte das die einzelnen Sachen einliest (am besten vom user über die shell eingegeben) und die Spalten erstellt. Da sich in den Spalten selber ja nichts ändert (außer in der letzten) sollte es doch gehn?

LG,
Anja

die Felder: feature, start, end und group ändern sich.
Die anderen Felder können vorbelegt werden.
group kann, so wie es aussieht, generiert werden.
Wenn die Eingaben fortlaufend erfolgen, dann muss für den group-eintrag vorher die Datei geöffnet und die Anzahl der Einträge ermittelt werden und zählst eins hoch.

Mit STDIN lässt Du also feature, start und end eingeben und baust die Datenzeile zusammen indem Du die einzelnen Values mit TAB ( „\t“ ) trennst und fügst die Zeile der Datei an.

Die Dateneingabe auf der Konsole ist aber nicht gerade komfortabel :smile:)

Hier gibt es sogar ein Modul dazu:
http://www.sanger.ac.uk/resources/software/gff/genef…

Gruß
Klaus

Ich habe halt noch ein anderes Script das mir für die einzelnen Varianten meines Motivs (also small_a, small_b) und so weiter die exakten Positionen in meiner Sequenz bestimmt. Das gibt mir aber nur die Anfangsposition d.h. ich müsste Perl noch sagen: zähle zu jeder Position (z.B) „10“ hoch und nimm das als Ende des Motivs.
Bei den Modulen muss ich erstmal durchsehen, aber danke für den Tip.

LG,
Anja

Hallo,

ich habe ein gff file (eine textdatei in der Bioinformatik)
und möchte diese mit einem Perl Skript erstellen da es in
einem bestimmten Schema vorliegt und es lange dauert es per
Hand zu erstellen. Die Zeilen sehen so aus:


Vielleicht hat jemand eine Idee wie man das in Perl
realisieren kann? Wäre für alles dankbar.

Deine Frage ist nicht zu beantworten, weil überhaupt
nicht klar ist, *was* genau aus dem vorherigen Skript
*wie* ankommt und nach welcher *Regel* dann die
folgende Spalte durch das fragliche Skript erzeugt
werden soll.

Und was *genau* soll denn über die Konsole eingegeben
werden - um dann *welche Spalte* zu modifizieren?

Grüße

CMБ

Hallo,

also nochmal von vorne.

*was* genau aus dem vorherigen Skript *wie* ankommt
aus dem vorherigen Skript bekomme ich die exakten Positionen der Motife (also zum Beispiel small_motif_a 805, 903, 1005) das sind aber nur die Anfangspositionen und die Motife sind 11 bp lang. Also wäre zum Beispiel eine Variante 805 bis 815
Jetzt wäre es schön wenn das Skipt um die Spalte zu erstellen die Ausgabe einlesen könnte und damit dann die Spalten 3,4,5 erzeugen könnte. Also den Namen der Variante (small_motif_a) die Anfangsposition und die Endposition. Die Positionen sind in dem gff file aufsteigend sortiert. Also vom Anfang der Sequenz zum Ende hin. Sieht man auch in dem Beispiel das ich eingefügt hatte.

Die Spalte 1 bezieht sich auf die Referenzsequenz und muss von dem user eingegeben werden, also vermutlich über die Konsole. Spalte 2 bezieht sich auf die Quelle der Daten (Programm, NCBI,…) also muss auch vom user eingegeben werden.3,4,5 hatte ich schon erklärt… Spalte 6,7,8 geben an ob der strand kodiert ist oder nicht- muss eingegeben werden. Spalte 9 ist mit am kompliziertesten da die ID mit hochgezählt werden muss und der Name sich auf die Variante in Spalte 3 bezieht.
Ich dachte jetzt wenn ich dieses Sachen über das Terminal eingeben lasse könnte das Skript diese Spalten selber erstellen. Es ändern sich ja nur Spalte 3,4,5 und 9. Der Rest bleibt ja gleich…

Gruß,
Anja