Diferentes formas de usar el comando de columna en Linux

Diferentes formas de usar el comando de columna en Linux

¿Alguna vez ha estado en una situación para trabajar con archivos CSV y producir salida en formato tabular estructurado?? Recientemente estaba trabajando con la limpieza de datos en un archivo que no está en una estructura adecuada. Tiene tantos espacios en blanco entre cada columna y tengo que convertirlo en formato CSV para llevar a la base de datos. Después de limpiar y crear la salida en formato CSV, mi salida no es atractiva visualmente para verificar la integridad de los datos en el archivo CSV. Este es el momento en que el comando de "columna" es útil para mí.

Según ManPage, el columna dominio "listas de columnas". En palabras simples, el columna es una utilidad simple que puede formatear su salida en un columna Formato (filas y campos) basado en la estructura de su archivo fuente. El columna El comando es parte del paquete Util-Linux.

Un punto importante a tener en cuenta aquí es columna El comando se comporta de manera diferente en las distribuciones con sede en Debian y Rhel. La razón es la distribución con sede en Debian "columna" de bsdmainutils en lugar de Util-Linux. La versión aguas arriba del columna el comando es más nuevo que el bsdmainutils paquete. Eche un vistazo al informe de error para saber más sobre esto.

$ dpkg -s $ (qué columna) 
Que columna

Para fines de demostración, estoy usando Centos 7 y mostrará diferentes opciones entre Ubuntu y Centos 7. Para comprobar el columna Versión Ejecutar el siguiente comando. Este comando también mostrará el Util-linux versión de paquete.

$ columna -Version # no funcionará en 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 columna Comandar un buen lugar para comenzar será la página del hombre y explorará sus opciones.

columna de $ hombre 

Lista del contenido del archivo en formato tabular

El columna El comando puede crear una tabla pasando el nombre de archivo como argumento junto con el -T bandera. estoy usando /etc/passwd Como el archivo de entrada.

$ columna -t /etc /passwd 
Lista del contenido del archivo en formato de tabla

Mirando la imagen de arriba, puede pensar que esto no es lo que esperábamos y la salida puede parecer extraña. Sí! Tienes razón. Columnas considerar espacio como delimitador predeterminado Al crear una mesa. Este comportamiento puede ser anulado pasando un delimitador personalizado.

Delimeter personalizado

Los delimitadores personalizados le brindan una amplia gama de opciones para trabajar con. Para crear un uso de delimitador personalizado -s bandera seguida de un delimitador. Ahora usaremos ":" Como delimitador para dividirse /etc/passwd archivo.

$ columna -s ":" -t /etc /passwd 
Delimitador

Mire la imagen de arriba donde la mesa está bien formateada y estructurada. De Util-linux versión 2.Opción 23 -s ha sido cambiado para no ser codicioso.

Ahora ejecuta el mismo comando en Ubuntu y el resultado será codicioso. Esto es porque columna dominio (bsdmainutils) en Ubuntu tratará múltiples palabras adyacentes como una sola palabra.

$ columna -s ":" -t /etc /passwd 
Salida codiciosa

Para superar este uso del comportamiento -norte bandera.

$ columna -t -s ":" -n/etc/passwd # solo en Debian/Ubuntu 
Salida no verde

Ignorar las líneas vacías blancas en la salida del archivo

Cuando tiene líneas en blanco en su archivo de entrada, el comando de columna de forma predeterminada lo ignora. 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.

$ columna -t -s ";" ficticio.TXT 
Ignorar vacío mientras las líneas

De la imagen de arriba puede ver mi archivo de entrada ficticio.TXT tiene líneas vacías y cuando intento crear una mesa, se ignoran las líneas vacías.

Nota: Este es el comportamiento predeterminado tanto para el "BSDMainutils/Util-Linux"Variante de la columna dominio. Pero columna (bsdmainutils) tiene la opción de anular este comportamiento pasando -mi bandera.

$ columna -e -t -s "," Dummy.txt # solo en Debian/Ubuntu 
Archivar líneas blancas

De la imagen de arriba, puede ver que la tabla está formateada correctamente y las líneas vacías no se ignoran.

Separador de salida de archivo

Por defecto, se utilizarán dos espacios blancos como separadores de salida. Este comportamiento puede ser anulado pasando -O bandera. No tendrá una opción de separador de salida disponible en el columna (bsdmainutils).

$ columna -t -s "," -o "||" ficticio.txt # solo en distribución basada en rhel 
Separador de salida de archivo

Convertir las filas de archivo en columnas

Utilizando el -X la bandera puede convertir filas en columnas. Este comportamiento es el mismo en ambos rhel y ubuntu variantes del comando de columna. Esta es una característica muy útil cuando tiene que tomar un cierto campo a través del comando AWK o columna y luego convertirlo en el encabezado para su archivo CSV.

$ columna -x relleno.TXT 
Convertir filas de archivo a columnas

Cuando corres el columna comando sin usar indicadores El comportamiento será el mismo que pasar -X bandera.

Encontrar el tamaño de la columna

El columna Utiliza una variable ambiental ($ Columnas) 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 $ columnas 

Hecha un vistazo a la imagen de abajo. Inicialmente, redimensioné mi terminal para tener $ Columnas el tamaño establecido en 60 y ejecutó el comando de columna. Nuevamente cambié el tamaño de mi terminal para tener $ Columnas el tamaño establecido en 114 y volvió a ejecutar el comando de columna. Puede ver la diferencia en cómo la columna imprime la tabla cuando cambia el tamaño del terminal.

$ columna -t -s ":" /etc /passwd | Cabeza 5 
Redigir tamaños de columna

Eso es todo para este artículo. Si tiene algún comentario, proporcione en la sección de comentarios.