GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zeilen basierend auf dem ersten Zeichen der nächsten Zeile verketten?

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.


Linux
  1. Cat Zeile X bis Zeile Y in einer riesigen Datei?

  2. Wie fügt man Text vor der ersten Zeile einer Datei ein?

  3. Effizient die ersten paar Zeilen aus einer Textdatei entfernen?

  4. Zusätzliche Kopfzeilen außer der ersten Zeile aus der Datei entfernen?

  5. Wie fügt man mehrere Zeilen an eine Datei an?

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So finden Sie die längste(n) Zeile(n) in einer Datei in Linux

So zeigen Sie bestimmte Zeilen einer Datei in der Linux-Befehlszeile an

Drucken Sie eine Datei, wobei Sie die ersten X-Zeilen in Bash überspringen

Bash-Skript fügt Text an die erste Zeile einer Datei an

Linux - grep von bestimmten Zeilen bis zum Ende der Datei