
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 g
am 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 g
am Ende, aber das habe ich bereits erwähnt.