Ich suche entfernte Kontaktlinien basierend auf der nächsten Linie. Bisher sehe ich nur die Möglichkeit, ein Shell-Skript zu erstellen, das Zeile für Zeile liest und etwas in dieser Richtung tut:
while read line
if $line does not start with "," and $curr_line is empty
store line in curr_line
if $line does not start with "," and $curr_line is not empty
flush $curr_line to file
store $line in $curr_line
if $line starts with "," append to $curr_file, flush to file empty curr_line
done < file
Also versuche ich zu verstehen, ob dies mit sed oder sogar grep mit Umleitung erreicht werden könnte.
Die Regeln der Datei sind einfach.
Es gibt maximal eine und nur eine Zeile, die mit „“ beginnt, die benötigt wird an die vorherige Zeile angehängt werden.
Bsp.:
line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11
Die Ergebnisdatei wäre
line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11
Akzeptierte Antwort:
Ich würde Folgendes tun:
awk -v ORS= '
NR>1 && !/,/ {print "n"}
{print}
END {if (NR) print "n"}' < file
Das heißt, es wird nur das Zeilenumbruchzeichen ausgegeben, das die vorherige Zeile begrenzt, wenn die aktuelle Zeile nicht mit einem ,
beginnt .
Auf jeden Fall würde ich keinen while read
verwenden Schleife.