Ich habe eine Zeichenfolge in einer test.csv-Datei wie folgt:Das Finden und Ersetzen des letzten Platzes bei oder vor dem n-ten Zeichen funktioniert mit sed aber nicht awk, was mache ich falsch?
here is my string
, wenn ich es funktioniert sed verwenden, wie ich erwarten:
cat test.csv | sed -r 's/^(.{1,9}) /\1,/g'
here is,my string
Dann, wenn ich awk es verwenden nicht funktioniert und ich bin nicht sicher, warum:
cat test.csv | awk '{gsub(/^(.{1,9}) /,","); print}'
,my string
ich brauche awk zu verwenden, denn wenn ich das herausgefunden werde ich nur eine Spalte wird die Auswahl in zwei Spalten mit dem zusätzlichen Komma zu trennen. Ich benutze erweiterte Regex mit sed, "-r" und fragte mich, wie oder ob es mit awk unterstützt wird, aber ich weiß nicht, ob das wirklich das Problem ist oder nicht.
Es sieht so aus, als ob der awk-Zeile eine Erfassungsgruppe in der Ersetzung fehlt, die in der sed-Zeile war. – sln
Ihr Befehl gibt ', my string' und nicht' here is my string' * (unverändert) * zurück. awk verfügt standardmäßig nicht über die Rückverweisfunktion. Aber Sie können Gawk und 'Gensub' anstelle von' Gsub' verwenden. * (Achten Sie darauf, dass 'gensub' keine Zeichenfolge an Ort und Stelle ändert, sondern die ersetzte Zeichenfolge zurückgibt) * –
@CasimiretHippolyte: Danke, Sie und Jaypal waren direkt am Geld! – lukeaw