Ich habe eine Datei mit Genomdaten, die ungefähr 5 Millionen Zeilen lang ist und nur die Zeichen A, T, C und G enthalten sollte. Das Problem ist, ich weiß, wie groß die Datei sein sollte, aber sie ist etwas größer. Das heißt, bei einer Analyse ist ein Fehler aufgetreten, oder es gibt Zeilen, die etwas anderes als genomische Daten enthalten.
Gibt es eine Möglichkeit, eine Linie zu finden, die etwas anderes als A, T, C oder G hat? Aufgrund der Art der Datei sollten keine anderen Buchstaben, Leerzeichen, Zahlen und Symbole vorhanden sein. Ich habe Symbol für Symbol gesucht und gehofft, dass es einen einfacheren Weg gibt.
Antworten:
Zunächst möchten Sie die Datei definitiv nicht in einem Editor öffnen (sie ist viel zu groß, um sie auf diese Weise zu bearbeiten).
Stattdessen, wenn Sie nur wollen , identifizieren , ob die Datei etwas anderes als enthält
A
,T
,C
undG
kann tun, dass mitDies würde alle Zeilen zurückgeben, die etwas anderes als diese vier Zeichen enthalten.
Wenn Sie diese Zeichen aus der Datei löschen möchten , können Sie dies mit tun
(ob dies der richtige Weg ist, um die Datei zu "korrigieren" oder nicht, weiß ich nicht)
Dies würde alle Zeichen in der Datei entfernen, die nicht zu den vier gehören, und es würde auch newlines (
\n
) beibehalten . Die bearbeitete Datei wird in geschriebennewfilename
.Wenn es sich um einen systematischen Fehler handelt, der der Datei etwas hinzugefügt hat, kann dies möglicherweise durch
sed
oder korrigiert werdenawk
, aber wir wissen noch nicht, wie Ihre Daten aussehen.Wenn Sie die Datei in
vi
oder geöffnet habenvim
, dann den Befehlwird das nächste Zeichen im Bearbeitungspuffer finden , die keine ist
A
,T
,C
oderG
.Und
:%s/[^ATCG]//g
wird sie alle entfernen.quelle
--line-number
(-n
) zu grep könnte aus offensichtlichen Gründen nützlich seingrep '[^ATCG]'
nur nach A, T, C & G in der ersten Spalte ?^
hat eine ganz andere Bedeutung, wenn es als erstes Zeichen innerhalb auftritt[...]
(es negiert die Zeichenklasse).grep '[^ATCG]'
keine Zeile ohne A, T, C & G in der ersten Spalte ?A
,T
,C
oderG
. Das[...]
bedeutet "eines dieser Zeichen", und mit dem^
am Anfang dieser Gruppe bedeutet es "ein Zeichen, aber nicht eines davon".Ich habe mich auf den Titel konzentriert
Und ich habe dies im VI-Editor getestet, dem sogenannten "Last-Line-Modus".
:%!tr -c -d 'ATCG\n
:
Aktiviert den Befehlszeilenmodus,%
stimmt die gesamte Datei als Bereich ab und!
filtert diesen Bereich über einen externen Befehltr -c -d 'ATCG\n
, der zufällig mit dem von @Kusalananda geschriebenen übereinstimmt :).quelle