En el tutorial de hoy sobre la administración de archivos de Linux, veremos enfoques válidos para unir varias líneas dentro de un archivo en una sola línea. Al final de este artículo, habrá agregado algunos hitos informáticos a su experiencia de administración de archivos de Linux.
[ También te puede interesar:Cómo unir dos archivos de texto en Linux ]
Las posibilidades/oportunidades para los usuarios que explotan el sistema operativo Linux a través de la interfaz de línea de comandos siguen siendo infinitas. Una de esas posibilidades es manipular un archivo de varias líneas en un archivo de una sola línea a través de una serie de comandos de Linux. El objetivo de fusionar tales líneas puede ser tan simple como la necesidad de agregar delimitadores personalizados al archivo de destino.
Enunciado del problema
Dado que este tutorial se centrará en fusionar varias líneas en una sola línea en un archivo de destino, debemos crear ese tipo de archivo para fines de referencia y completarlo con algunos datos de varias líneas.
$ sudo nano sample_file.txt
Según la captura de pantalla anterior, estamos tratando con un archivo (sample_file.txt ) con seis líneas, y hay tres enfoques para unir estas seis líneas:
- Sin delimitadores:¡Me encantan los tutoriales de sugerencias de LinuxShell!
- Con un delimitador de un solo carácter:I Genuinely,Love,Linux.Shell,Tips,Tutorials!
- Con delimitadores de varios caracteres:I Genuinely;Love;Linux;Shell;Tips;Tutorials!
Cómo unir varias líneas en una sola línea en un archivo
Echemos un vistazo a estos tres enfoques para unir varias líneas dentro de un archivo en una sola línea en Linux.
1. Usando el Comando sed
El poder del sed La utilidad de línea de comandos de procesamiento de texto nos permitirá unir las seis líneas en nuestro archivo de texto de muestra al abordar los tres enfoques discutidos anteriormente en referencia a casi la misma sintaxis de código.
Sin delimitadores:
$ sed ':a; N; $!ba; s/\n//g' sample_file.txt
Con espaciado:
$ sed ':a; N; $!ba; s/\n/ /g' sample_file.txt
Con un delimitador de un solo carácter, p. una coma:
$ sed ':a; N; $!ba; s/\n/,/g' sample_file.txt
Con delimitador de caracteres múltiples, p. punto y coma y espacio en blanco:
$ sed ':a; N; $!ba; s/\n/; /g' sample_file.txt
2. Usando el Comando awk
El awk de Linux command es otra herramienta de línea de comandos de procesamiento de texto de buena reputación. Su enfoque para resolver nuestro problema de varias líneas a una sola línea se puede analizar e implementar de la siguiente manera:
Sin delimitadores:
$ awk -v d="" '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Con espaciado:
$ awk -v d=" " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Con un delimitador de un solo carácter, p. una coma:
$ awk -v d="," '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Con delimitador de caracteres múltiples, p. punto y coma y espacio en blanco:
$ awk -v d="; " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
3. Usando el comando pegar
La pega El comando solo es ideal para unir varias líneas sin delimitadores, con espaciado y con un delimitador de un solo carácter. Esta utilidad reside en GNU Coreutils paquete, por lo tanto, su disponibilidad en todas las distribuciones del sistema operativo Linux.
Sin delimitadores:
$ paste -sd '' sample_file.txt
Con espaciado:
$ paste -sd ' ' sample_file.txt
Con un delimitador de un solo carácter, p. un guión bajo:
$ paste -sd '_' sample_file.txt
El guión bajo (_)
se puede eliminar canalizando el comando pegar a un comando sed:
$ paste -sd '_' sample_file.txt | sed 's/_$/\n/'
Este enfoque no es ideal con delimitadores de varios caracteres, por ejemplo, un punto y coma y un espacio en blanco debido a resultados irregulares como los siguientes:
$ paste -sd '; ' sample_file.txt
4. Usando el Comando tr
El comando tr también es ideal para unir varias líneas sin delimitadores, con espaciado y con un delimitador de un solo carácter.
Sin delimitadores:
$ tr -d '\n' < sample_file.txt
Con espaciado:
$ tr '\n' ' ' < sample_file.txt
Con un delimitador de un solo carácter, p. una coma:
$ tr '\n' ',' < sample_file.txt
Canalice la salida a un comando sed para deshacerse de las comas adicionales.
$ tr '\n' ',' < sample_file.txt | sed 's/,,$/\n/'
Hemos aprendido con éxito cómo unir varias líneas en una sola línea en un archivo en Linux.