2017-03-15 19 views
0

Lassen Sie uns sagen, ich habe eine CSV-Datei formatiert wie folgt:Suchen und ersetzen zweites Vorkommen von Zeilenbeginn mit sed?

1,Mark 
1,Smith 
2,Janet 
2,Smith 

Und ich brauche es so zu machen:

1,Mark Smith 
2,Janet Smith 

Ich muss jedes Vorkommen eines gegebenen Linie Opener nach dem Ersatz zuerst, dann verketten Sie jede Zeile ohne einen Opener in die letzte Zeile, die das getan hat. Wie kann ich das machen?

+2

Was hast du selbst versucht? – Inian

Antwort

1

zur nächsten Zeile zu Musterraum anhängen und Newline-Zeichen gefolgt von einer Ziffer entfernen:

sed 'N;s/\n[0-9]//;s/,/ /2g' file 

Im Fall könnte es nur eine oder mehr als zwei Vorkommen sein:

sed ':a;N;s/^\([0-9][0-9]*\)\(.*\) *\n\1,/\1\2 /;ta;P;D;' file 
+0

Vielleicht möchten Sie das zweite oder mehrere Komma (s) entfernen und durch Leerzeichen ersetzen. – potong

+0

@potong Danke, ich habe es bearbeitet. – SLePort

0

Mit awk ist einfacher und wird gut funktionieren, egal wie viele Vorkommen Sie haben oder egal, ob die Daten sortiert sind oder nicht:

awk 'BEGIN{FS=OFS=","}{!a[$1]?a[$1]=$0:a[$1]=a[$1] " " $2}END{for (i in a) print a[i]}' file1 
+0

kann jemand wissen, was die Regex für dieses Beispiel in Notepad ++ sein wird? –

Verwandte Themen