GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:dividir una sola línea en varias líneas, ¿falta el carácter de nueva línea para todas las líneas en el archivo de entrada?

Esta pregunta ya tiene respuestas aquí :¿Cómo procesar un archivo de texto de varias columnas para obtener otro archivo de texto de varias columnas?

(7 respuestas)
Cerrado hace 3 años.

Hay una forma de dividir una sola línea en varias líneas con 3 columnas.
Faltan caracteres de nueva línea al final de todas las líneas del archivo.

Intenté usar awk, pero está dividiendo cada columna en una fila en lugar de 3 columnas en cada fila.

awk '{ gsub(",", "n") } 6' filename

donde filename El contenido de parece:

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O

La salida deseada tiene 3 columnas en cada línea:

A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Respuesta aceptada:

Usando awk

$ awk -v RS='[,n]' '{a=$0;getline b; getline c; print a,b,c}' OFS=, filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Cómo funciona

  • -v RS='[,n]'

    Esto le dice a awk que use cualquier aparición de una coma o una nueva línea como separador de registros.

  • a=$0; getline b; getline c

    Esto le dice a awk que guarde la línea actual en la variable a , la siguiente línea en varaible b , y la siguiente línea después de eso en la variable c .

  • print a,b,c

    Esto le dice a awk que imprima a , b y c

  • OFS=,

    Esto le dice a awk que use una coma como separador de campo en la salida.

Usando tr y paste

$ tr , 'n' <filename | paste -d, - - -
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Cómo funciona

  • tr , 'n' <filename

    Esto lee desde el nombre del archivo mientras convierte todas las comas en líneas nuevas.

  • paste -d, - - -

    Este paste para leer tres líneas de stdin (una para cada - ) y péguelos juntos, cada uno separado por una coma (-d, ).

Awk alternativo

$ awk -v RS='[,n]' '{printf "%s%s",$0,(NR%3?",":"n")}' filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Cómo funciona

  • -v RS='[,n]'

    Esto le dice a awk que use cualquier aparición de una coma o una nueva línea como separador de registros.

  • printf "%s%s",$0,(NR%3?",":"n")

    Esto le dice a awk que imprima la línea actual seguida de una coma o una nueva línea dependiendo del valor del número de línea actual, NR , módulo 3.


Linux
  1. 8 consejos para la línea de comandos de Linux

  2. Cómo dividir un solo archivo en varios archivos según las filas

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

  4. 9 ejemplos útiles del comando Split en Linux

  5. Linux:compruebe si hay una línea vacía al final de un archivo

3 gestores de contraseñas para la línea de comandos de Linux

Cómo dividir un archivo grande en varios archivos pequeños usando el comando Dividir en Linux

Cómo dividir un archivo grande en varios archivos pequeños usando el comando Dividir en Linux

Cómo unir varias líneas en una en un archivo en Linux

Ver el contenido de un archivo en la línea de comandos de Linux

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