Diferents maneres d'utilitzar l'ordre de columna a Linux


Alguna vegada has estat en una situació per treballar amb fitxers CSV i produir resultats en format tabular estructurat? Recentment vaig estar treballant amb la neteja de dades en un fitxer que no es troba en una estructura adequada. Té tants espais en blanc entre cada columna i he de convertir-lo a format CSV per enviar-lo a la base de dades. Després de netejar i crear la sortida en format CSV, la meva sortida no és visualment atractiva per verificar la integritat de les dades al fitxer CSV. Aquest és el moment en què em resulta útil l'ordre \Columna.

Segons la pàgina de manual, l'ordre de columna \llistes de columnes. En paraules senzilles, la columna és una utilitat senzilla que pot formatar la vostra sortida en un format de columna (files i camps) basat en l'estructura del fitxer font. L'ordre de columna és part del paquet util-linux.

Un punt important a tenir en compte aquí és que l'ordre de columna es comporta de manera diferent a l'informe d'errors per saber-ne més.

$ dpkg -S $(which column)

Amb finalitats de demostració, estic fent servir CentOS 7 i mostraré diferents opcions entre Ubuntu i CentOS 7. Per comprovar la versió de la columna, executeu l'ordre següent. Aquesta ordre també mostrarà la versió del paquet util-linux.

$ column --version  # will not work in Debian/ubuntu

També podeu comprovar la versió d'util-linux executant les ordres següents.

$ rpm -qa | grep -i util-linux   # Redhat,Centos,Fedora,Amazon Linux
$ dpkg -l | grep -i util-linux    # Ubuntu

Abans d'utilitzar l'ordre de columna, un bon lloc per començar serà la pàgina de manual i explorar les seves opcions.

$ man column

Llista el contingut del fitxer en format tabular

L'ordre de columna pot crear una taula passant el nom del fitxer com a argument juntament amb el senyalador -t. Estic fent servir /etc/passwd com a fitxer d'entrada.

$ column -t /etc/passwd

Mirant la imatge anterior, podeu pensar que això no és el que esperàvem i la sortida pot semblar estranya. Sí! Tens raó. Les columnes consideren l'espai com el delimitador predeterminat quan es crea una taula. Aquest comportament es pot anul·lar passant un delimitador personalitzat.

Delímetre personalitzat

Els delimitadors personalitzats us ofereixen una àmplia gamma d'opcions per treballar. Per crear un delimitador personalitzat, utilitzeu el senyalador -s seguit d'un delimitador. Ara utilitzarem \:” com a delimitador per dividir el fitxer /etc/passwd.

$ column -s ":"  -t /etc/passwd

Mireu la imatge de dalt on la taula està ben formatada i estructurada. A partir de la versió 2.23 d'util-linux, l'opció -s s'ha canviat perquè no sigui cobdiciosa.

Ara executeu la mateixa ordre a Ubuntu i el resultat serà cobdiciós. Això es deu al fet que l'ordre de columna (bsdmainutils) a Ubuntu tractarà diverses paraules adjacents com una sola paraula.

$ column -s ":"  -t /etc/passwd

Per superar aquest comportament, utilitzeu el senyalador -n.

$ column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu

Ignoreu les línies blanques buides a la sortida del fitxer

Quan teniu línies en blanc al fitxer d'entrada, l'ordre de columna per defecte l'ignora. Vegeu el meu fitxer d'entrada que està en format CSV i he afegit una línia en blanc entre cada línia. Ara creem una taula com hem fet abans amb aquest fitxer d'entrada.

$ column -t -s ";" dummy.txt

A la imatge de dalt podeu veure el meu fitxer d'entrada dummy.txt té línies buides i quan intento crear una taula, les línies buides s'ignoren.

Nota: Aquest és el comportament per defecte tant per a la variant \bsdmainutils/util-linux de l'ordre column. Però column (bsdmainutils) té l'opció d'anul·lar aquest comportament passant el senyalador -e.

$ column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu

A la imatge de dalt, podeu veure que la taula està formatada correctament i que les línies buides no s'ignoren.

Separador de sortida de fitxers

Per defecte, s'utilitzaran dos espais en blanc com a separadors de sortida. Aquest comportament es pot anul·lar passant el senyalador -o. No tindreu una opció de separador de sortida disponible a la columna (bsdmainutils).

$ column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro

Converteix files de fitxers en columnes

Utilitzant el senyalador -x podeu convertir files en columnes. Aquest comportament és el mateix tant a les variants rhel com a ubuntu de l'ordre de columna. Aquesta és una característica molt útil quan heu d'agafar un camp determinat mitjançant l'ordre awk o columna i després convertir-lo a la capçalera del vostre fitxer CSV.

$ column -x fillcols.txt

Quan executeu l'ordre de columna sense utilitzar cap senyalador, el comportament serà el mateix que passar el senyalador -x.

Cerqueu la mida de la columna

La columna utilitza una variable ambiental ($COLUMNS) per esbrinar la mida del vostre terminal i, segons la mida, utilitzeu l'ordre echo, la mida de la taula es mostrarà al terminal.

$ echo $COLUMNS

Fes una ullada a la imatge següent. Inicialment, vaig canviar la mida del meu terminal per tenir $COLUMNS la mida establerta en 60 i vaig executar l'ordre de columna. De nou, vaig canviar la mida del meu terminal per tenir $COLUMNS la mida establerta a 114 i vaig tornar a executar l'ordre de columna. Podeu veure la diferència en com la columna imprimeix la taula quan canviem la mida del terminal.

$ column -t -s ":" /etc/passwd | head 5

Això és tot per aquest article. Si teniu qualsevol comentari, si us plau, proporcioneu-lo a la secció de comentaris.