Wie lösche ich den Rest jeder Zeile nach einem bestimmten Muster in einer VCF-Datei?

Wie lösche ich den Rest jeder Zeile nach einem bestimmten Muster in einer VCF-Datei?

So entfernen Sie die Ziffern nach :dem Vorzeichen in jeder Zeile einer VCF-Datei. Beispiel:

0|0:0.81        0|1:0.81        0|0:0.76        0|0:0.83
0|1:0.99        0|0:0.03        0|0:0.83        0|0:0.2

Die Ausgabe sollte sein:

0|0        0|1        0|0        0|0
0|1        0|0        0|0        0|0

Ich habe Folgendes versucht, aber es entfernt alles nach dem ersten:

sed 's/[:].*$//' file.vcf 

Antwort1

Sie möchten aus dem :und dann direkt danach so viele Zeichen wie möglich löschen, die Ziffern oder Punkte sind:

$ sed 's/:[0-9.]*//g' file.vcf
0|0        0|1        0|0        0|0
0|1        0|0        0|0        0|0

Sie benötigen dies auch gam Ende, um die Ersetzung für alle übereinstimmenden Teilzeichenfolgen in jeder Zeile zu wiederholen.


Ihr Befehl,

sed 's/[:].*$//' file.vcf 

würde mit dem ersten :Zeichen übereinstimmen und dannbeliebig viele Zeichen bis zum Zeilenende. Deshalb erhalten Sie am Ende

0|0
0|1

als Ausgabe.

Der Unterschied zwischen diesem und meinem vorgeschlagenen Ausdruck ist das .(das mit jedem einzelnen Zeichen übereinstimmt), das ich geändert habe, um [0-9.]die Menge der Zeichen einzuschränken, die wir tatsächlich löschen möchten. Wir können das Muster auch nicht mit am Ende der Zeile verankern, $da wir auch Dinge in der Mitte der Zeile löschen müssen. Und das gam Ende, aber das habe ich bereits erwähnt.

verwandte Informationen