Ich habe eine Datei mit drei Spalten. Spalte 3 enthält Namen von Genen und sieht folgendermaßen aus:
Rv0729,Rv0993,Rv1408
Rv0162c,Rv0761c,Rv1862,Rv3086
Rv2790c
Wie kann ich die Anzahl der Gene in jeder Zeile drucken?
text-processing
Saisha
quelle
quelle
Rv*
Muster an einer beliebigen Stelle in der Zeile übereinstimmen , nicht nur in einer bestimmten Spalte. Ich möchte nur darauf hinweisen, dass Sie die Lösungen möglicherweise entsprechend ändern müssen, wenn Sie tatsächlich andere Daten in der Datei haben, die in der Frage hier nicht aufgeführt sind. (Oder klären Sie die Frage.)Antworten:
Sie möchten einfach eine Spalte mit der Anzahl der darin enthaltenen Spalten hinzufügen. Dies kann erfolgen mit
awk
:NF
ist eineawk
Variable, die die Anzahl der Felder (Spalten) im aktuellen Datensatz (Zeile) enthält. Wir drucken diese Zahl gefolgt von einem Komma und dem Rest der Zeile für jede Zeile.Eine Alternative (gleiches Ergebnis, sieht aber vielleicht etwas sauberer aus):
FS
ist das Feldtrennzeichen,awk
mit dem jeder Datensatz in Felder aufgeteilt wird, und wir setzen dies auf ein Komma mit-F ','
in der Befehlszeile (wie in der ersten Lösung).OFS
ist das Trennzeichen für das Ausgabefeld , und wir setzen es so, wie esFS
vor dem Lesen der ersten Eingabezeile ist.quelle
Wenn Sie die Anzahl der Vorkommen des
Rv[0-9]{4}c?
Musters im Gegensatz zur Anzahl der durch Kommas getrennten Felder zählen möchten, wie das Thema Ihrer Frage vorschlägt, können Sie Folgendes tun:quelle
Ein Perl-Ansatz:
Die
-a
Markenperl
verhalten sich wieawk
und teilen jede Eingabezeile in der von angegebenen Zeichenfolge auf-F
und speichern die resultierenden Felder im Array@F
. Daher ist$#F
dies der höchste Array-Index in@F
und, da Arrays bei zu zählen beginnen0
,$#F+1
die Gesamtzahl der Elemente im Array. Die-p
Mittel "jede Eingabezeile drucken, nachdem das von gegebene Skript angewendet wurde-e
. Ders///
ist der Substitutionsoperator und hier ersetzen Sie den Anfang der Zeile (^
) durch die Anzahl der Felder + 1 und ein Komma ($#F+1 . ","
).quelle
Ihre Frage besagt, dass Spalte 3 Namen von Genen enthält. Ich gehe davon aus, dass Ihre tatsächliche Eingabe wie folgt lautet:
Jeder Genname in Spalte 3 enthält einen führenden
Rv
Teilstring. So können wir sie in Python so zählen:Die resultierende Liste zeigt die Anzahl der Gene in jeder Zeile in ihrer jeweiligen Reihenfolge. Wenn wir es ausführlicher gestalten und die Möglichkeit einschließen möchten, dass Gene möglicherweise keine "Rv" -String enthalten (aber die Annahme beibehalten, dass Spalte3 eine durch Kommas getrennte Wertzeichenfolge ist), können wir auch Folgendes tun:
Testlauf:
quelle