Ich habe eine zweispaltige, durch Leerzeichen getrennte TXT-Datei, aber die erste Spalte enthält Leerzeichen (die Fehler sind). Ich muss es in eine CSV konvertieren, aber ich kann nicht einfach alle Leerzeichen durch Kommas ersetzen.
Beispieleingabe:
gi|118592783|ref|ZP_01550172.1|_biphenyl-2 3-diol_1 2-dioxygenase_[Stappia_aggregata_IAM_12614] 1
Gewünschte Ausgabe:
gi|118592783|ref|ZP_01550172.1|_biphenyl-23-diol_12-dioxygenase_[Stappia_aggregata_IAM_12614],1
Wie kann ich sed
(oder etwas anderes) verwenden, um das letzte Leerzeichen in einer Reihe durch ein Komma zu ersetzen und dann alle verbleibenden Leerzeichen zu entfernen? Würde das effektiv eine CSV-Datei erstellen?
command-line
text-processing
sed
Zoey RW
quelle
quelle
sed 's/.* /&,/;s/ //g'
. Wenn sowieso alle Leerzeichen entfernt werden, macht es keinen Unterschied, das Komma nach dem letzten Leerzeichen anzuhängen, sodass Sie dieses\1
Zeug und die erweiterte RE nicht benötigen .Dies würde den Job machen:
oder:
Eingabebeispiel:
Ausgabe:
quelle
tr
da es explizit ist und daher für neue Benutzer besser lesbar ist, aber das zweitesed
ist auch ein gutes Zitat.Hier ist ein geekiger Weg - mit einer sed-Schleife.
was wir in GNU sed schreiben können als
Testen:
quelle
Perl
oder kürzer:
Tatsächlich ist dies das Gegenteil von Murus Ansatz: Wir entfernen zuerst alle Leerzeichen und gruppieren dann alles vor dem letzten Element (Gruppe
\1
) und dem letzten Element (Gruppe\2
, zwei, die zufällig eine Ziffer sind). Wir ersetzen die Zeile durch Gruppe\1
und\2
werden durch Komma getrennt.Beachten Sie, dass
([[:digit:]])
dies geändert werden kann, um(.)
auf ein beliebiges Zeichen zu verweisen, falls dies erforderlich ist (dh wenn wir erwarten, dass das letzte Zeichen von einem beliebigen Typ ist), oder dass wir([[:graph:]])
nur druckbare Zeichen verwenden könnenquelle