2016-05-01 7 views
2

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.

+0

Es sieht so aus, als ob der awk-Zeile eine Erfassungsgruppe in der Ersetzung fehlt, die in der sed-Zeile war. – sln

+1

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) * –

+0

@CasimiretHippolyte: Danke, Sie und Jaypal waren direkt am Geld! – lukeaw

Antwort

1

awk nicht Unterstützung zurück Referenzen in gsub. Wenn Sie auf GNU awk sind, dann kann gensub verwendet werden, um zu tun, was Sie brauchen.

echo "here is my string" | awk '{print gensub(/^(.{1,9}) /,"\\1,","G")}' 
here is,my string 

Beachten Sie die Verwendung von Doppel \ innerhalb des genannten Ersatzteiles. Sie können mehr über gensubhere lesen.

+0

Dank dir und Casimir! Ich habe versucht, mit Gensub, bevor ich veröffentlicht, aber hatte einen Fehler und dann habe ich versucht, Ihre Lösung und erkannte, dass die GNU awk (gawk) nicht installiert war, aber ich hätte auch das doppelte '\' so vielen Dank für die Aufräumarbeiten Fehler meiner Wege! – lukeaw

+0

@lukeaw Gern geschehen. Ich bin froh, dass du es aussortiert hast! Prost! –

Verwandte Themen