GNU/Linux >> Tutoriales Linux >  >> Linux

¿Concatenar líneas basadas en el primer carácter de la siguiente línea?

Estoy buscando líneas de contacto de distancia basadas en la siguiente línea. Hasta ahora, la única forma que veo es crear un script de shell que lea línea por línea y haga algo como lo siguiente:

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

Así que estoy tratando de entender si se puede lograr con sed o incluso con grep con redirección.
las reglas del archivo son simples.
Hay como máximo una y solo una línea que comienza con "," que necesita para ser añadido a la línea anterior.

ej.:

line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11

El archivo de resultado sería

line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11

Respuesta aceptada:

Yo haría:

awk -v ORS= '
  NR>1 && !/,/ {print "n"}
  {print}
  END {if (NR) print "n"}' < file

Es decir, solo imprime ese carácter de nueva línea que delimita la línea anterior si la actual no comienza con un , .

En cualquier caso, no usaría un while read bucle.


Linux
  1. Cat ¿Línea X a Línea Y en un archivo enorme?

  2. ¿Eliminar líneas de encabezado adicionales del archivo, excepto la primera línea?

  3. Eliminación de líneas específicas de un archivo en la línea de comandos de Linux

  4. Cómo contar líneas en un archivo en UNIX/Linux

  5. Imprima un archivo, omitiendo las primeras líneas X, en Bash

Cómo quitar líneas de un archivo usando el comando Sed

Cómo encontrar las líneas más largas en un archivo en Linux

¿Cómo agregar varias líneas a un archivo?

¿Contar líneas en un archivo?

Cómo mostrar líneas específicas de un archivo en la línea de comandos de Linux

Linux:grep desde ciertas líneas hasta el final del archivo