44 votos

Combinación de dos líneas en una sola

Tengo un archivo de texto con el siguiente formato. La primera línea es la "CLAVE" y la segunda línea es el "VALOR".

KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1

Necesito el valor en la misma línea de la clave. Por lo que el resultado debería parecerse a esto...

KEY 4048:1736 string 3
KEY 0:1772 string 1
KEY 4192:1349 string 1
KEY 7329:2407 string 2
KEY 0:1774 string 1

Será mejor si yo podría usar como delimitador de $ o , CLAVE 4048:1736 cadena , 3

¿Cómo puedo combinar dos líneas en una sola?

74voto

Kent Puntos 71470

awk:

awk 'NR%2{printf $0" ";next;}1' yourFile

tenga en cuenta que hay una línea en blanco al final de salida.

sed:

sed 'N;s/\n/ /' yourFile

67voto

glenn jackman Puntos 69748

paste es bueno para este trabajo:

paste -d " "  - - < filename

17voto

ghoti Puntos 14996

Un montón de maneras de la piel del gato.

awk '{key=$0; getline; print key ", " $0;}'

Poner todo lo que delimitador te gusta dentro de las comillas.

9voto

J.D. Puntos 83

Aunque parece que las soluciones anteriores, si una sola anomalía se produce en el documento que la salida iba a pedazos. A continuación es un poco más seguro.

sed -n '/KEY/{
N
s/\n/ /p
}' somefile.txt

6voto

jaypal Puntos 34440

Aquí hay otra manera con awk:

awk 'ORS=NR%2?FS:RS' file

$ cat file
KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1

$ awk 'ORS=NR%2?FS:RS' file
KEY 4048:1736 string 3
KEY 0:1772 string 1
KEY 4192:1349 string 1
KEY 7329:2407 string 2
KEY 0:1774 string 1

Como se indica por Ed Morton en los comentarios, es mejor añadir llaves para la seguridad y paréntesis para la portabilidad.

awk '{ ORS = (NR%2 ? FS : RS) } 1' file

ORS stands para la Salida del Separador de Registro. Lo que estamos haciendo aquí es la prueba de una condición de uso de la NR que almacena el número de línea. Si el modulo de NR es un valor true (>0) entonces nos pusimos a la Salida del Separador de Campo para el valor de FS (Separador de Campo) que por defecto es el espacio, de lo contrario se le asigna el valor de RS (Separador de Registro), que es el salto de línea.

Si desea agregar , como separador, a continuación, utilice la siguiente:

awk '{ ORS = (NR%2 ? "," : RS) } 1' file

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X