¿Alguna vez ha estado en la situación de trabajar con archivos CSV y producir resultados en formato tabular estructurado? Recientemente estuve trabajando con la limpieza de datos en un archivo que no tiene la estructura adecuada. Tiene tantos espacios en blanco entre cada columna y tengo que convertirlo a formato CSV para enviarlo a la base de datos. Después de limpiar y crear la salida en formato CSV, mi salida no es visualmente atractiva para verificar la integridad de los datos en el archivo CSV. Este es el momento en que el comando “Columna” me resulta útil.
Según la página de manual, el comando de columna ” listas de <strong>columnas</strong> “. En palabras simples, la columna es una utilidad simple que puede formatear su salida en un formato de columna (filas y campos) según la estructura de su archivo fuente. El comando de columna es parte del paquete util-linux.
Un punto importante a tener en cuenta aquí es que el comando de <strong>columna se</strong> comporta de manera diferente en las distribuciones basadas en Debian y basadas en Rhel. La razón es que la distribución basada en Debian usa ” column ” de bsdmainutils en lugar de util-linux. La versión anterior del comando column es más reciente que el paquete bsdmainutils . Eche un vistazo al informe de errores para saber más sobre esto.
$ dpkg -S $(which column)
Que columna
Para fines de demostración, estoy usando CentOS 7 y mostraré diferentes opciones entre Ubuntu y CentOS 7 . Para verificar la versión de la columna , ejecute el siguiente comando. Este comando también mostrará la versión del paquete util-linux .
$ column --version # will not work in Debian/ubuntu
También puede verificar la versión de util-linux ejecutando los siguientes comandos.
$ rpm -qa | grep -i util-linux # Redhat,Centos,Fedora,Amazon Linux $ dpkg -l | grep -i util-linux # Ubuntu
Antes de usar el comando de columna, un buen lugar para comenzar será la página de manual y explorar sus opciones.
$ man column
Mostrar el contenido del archivo en formato tabular
El comando de columna puede crear una tabla pasando el nombre del archivo como argumento junto con la -t
bandera. Estoy usando / etc / passwd como archivo de entrada.
$ column -t /etc/passwd
Mostrar el contenido del archivo en formato de tabla
Al mirar la imagen de arriba, puede pensar que esto no es lo que esperábamos y el resultado puede parecer extraño. ¡Sí! Tienes razón. Las columnas consideran el espacio como el delimitador predeterminado al crear una tabla. Este comportamiento se puede anular pasando un delimitador personalizado.
Delímetro personalizado
Los delimitadores personalizados le brindan una amplia gama de opciones con las que trabajar. Para crear un delimitador personalizado, utilice la -s
marca seguida de un delimitador. Ahora lo usaremos “:”
como delimitador para dividir el archivo / etc / passwd .
$ column -s ":" -t /etc/passwd
Delimitador
Mire la imagen de arriba donde la tabla está bien formateada y estructurada. Desde la versión 2.23 de util-linux , la opción -s
se ha cambiado para que no sea codiciosa.
Ahora ejecute el mismo comando en Ubuntu y el resultado será codicioso. Esto se debe a que el comando de <strong>columna</strong> ( bsdmainutils ) en Ubuntu tratará varias palabras adyacentes como una sola palabra.
$ column -s ":" -t /etc/passwd
Salida codiciosa
Para superar este comportamiento, utilice -n
flag.
$ column -t -s ":" -n /etc/passwd # Only on Debian/Ubuntu
Salida no codiciosa
Ignorar líneas blancas vacías en la salida del archivo
Cuando tiene líneas en blanco en su archivo de entrada, el comando de columna lo ignora por defecto. Vea mi archivo de entrada que está en formato CSV y agregué una línea en blanco entre cada línea. Ahora creemos una tabla como lo hicimos antes con este archivo de entrada.
$ column -t -s "" dummy.txt
Ignorar líneas mientras vacías
En la imagen de arriba, puede ver que mi archivo de entrada dummy.txt tiene líneas vacías y cuando intento crear una tabla, las líneas vacías se ignoran.
Nota : Este es el comportamiento predeterminado para la variante ” <strong>bsdmainutils / util-linux</strong> ” del comando de columna . Pero column ( bsdmainutils ) tiene la opción de anular este comportamiento pasando -e
flag.
$ column -e -t -s "," dummy.txt # Only on Debian/Ubuntu
Archivo líneas blancas
En la imagen de arriba, puede ver que la tabla está formateada correctamente y que las líneas vacías no se ignoran.
Separador de salida de archivos
De forma predeterminada, se utilizarán dos espacios en blanco como separadores de salida. Este comportamiento se puede anular pasando -o
flag. No tendrá una opción de separador de salida disponible en la columna ( bsdmainutils ).
$ column -t -s "," -o "||" dummy.txt# Only on Rhel based distro
Separador de salida de archivos
Convertir filas de archivos en columnas
Con la -x
bandera puede convertir filas en columnas. Este comportamiento es el mismo en las variantes rhel y ubuntu del comando column. Esta es una característica muy útil cuando tiene que tomar un determinado campo a través del comando awk o column y luego convertirlo en el encabezado de su archivo CSV.
$ column -x fillcols.txt
Convertir filas de archivos en columnas
Cuando ejecuta el comando de columna sin usar ningún indicador, el comportamiento será el mismo que el de pasar el -x
indicador.
Encontrar tamaño de columna
La columna usa una variable de entorno ($COLUMNS)
para averiguar el tamaño de su terminal y, según el tamaño, use el comando echo, el tamaño de la tabla se mostrará en el terminal.
$ echo $COLUMNS
Hecha un vistazo a la imagen de abajo. Inicialmente, cambié el tamaño de mi terminal para tener $COLUMNS
el tamaño establecido en 60 y ejecuté el comando de columna. Nuevamente cambié el tamaño de mi terminal para establecer $COLUMNS
el tamaño en 114 y volví a ejecutar el comando de columna. Puede ver la diferencia en cómo la columna imprime la tabla cuando cambiamos el tamaño de la terminal.
$ column -t -s ":" /etc/passwd | head 5
Cambiar el tamaño de las columnas
Eso es todo por este artículo. Si tiene algún comentario, envíelo en la sección de comentarios.
Comandos de Linux