Ați fost vreodată în situația de a lucra cu fișiere CSV și de a produce rezultate în format tabelar structurat? Recent am lucrat cu curățarea datelor pe un fișier care nu se află într-o structură adecvată. Are atât de multe spații albe între fiecare coloană și trebuie să o convertesc în format CSV pentru a trece la baza de date. După curățarea și crearea rezultatului în format CSV, ieșirea mea nu este atrăgătoare vizual pentru a verifica integritatea datelor din fișierul CSV. Acesta este momentul în care comanda „Coloană” îmi vine la îndemână.
Conform paginii de manual, coloană comanda „liste cu coloane”. În cuvinte simple, coloană este un utilitar simplu care vă poate formata ieșirea într-un fișier coloană format (rânduri și câmpuri) bazat pe structura fișierului sursă. coloană comanda face parte din pachetul util-linux.
Un punct important de remarcat aici este coloană comanda se comportă diferit în Bazat pe Debian și Distribuții bazate pe Rhel. Motivul este că utilizările de distribuție bazate pe Debian „
coloană”Din bsdmainutils în loc de util-linux. Versiunea în amonte a coloană comanda este mai nouă decât bsdmainutils pachet. Aruncați o privire la raport de erori pentru a afla mai multe despre asta.$ dpkg -S $ (care coloană)
În scop demonstrativ, îl folosesc CentOS 7 și va afișa diferite opțiuni între Ubuntu și CentOS 7. Pentru a verifica coloană version executați următoarea comandă. Această comandă va afișa și fișierul util-linux versiunea pachetului.
$ column --version # nu va funcționa în Debian / ubuntu.
De asemenea, puteți verifica versiunea de util-linux executând comenzile de mai jos.
$ rpm -qa | grep -i util-linux # Redhat, Centos, Fedora, Amazon Linux. $ dpkg -l | grep -i util-linux # Ubuntu.
Înainte de a utiliza coloană comanda un loc bun pentru a începe va fi pagina de manual și de a explora opțiunile sale.
coloana $ man.
coloană comanda poate creați un tabel trecând numele fișierului ca argument împreună cu -t
steag. eu folosesc /etc/passwd ca fișier de intrare.
$ column -t / etc / passwd.
Privind imaginea de mai sus, s-ar putea să credeți că acest lucru nu este ceea ce ne așteptam, iar rezultatul ar putea părea ciudat. Da! Ai dreptate. Coloane considera spațiu ca delimitator implicit la crearea unei tabele. Acest comportament poate fi anulat prin trecerea unui delimitator personalizat.
Delimitatorii personalizați vă oferă o gamă largă de opțiuni cu care puteți lucra. Pentru a crea un delimitator personalizat utilizați -s
steag urmat de un delimitator. Acum vom folosi “:”
ca delimitator de divizat /etc/passwd fişier.
$ column -s ":" -t / etc / passwd.
Uită-te la imaginea de mai sus, unde tabelul este frumos formatat și structurat. Din util-linux versiunea 2.23 opțiune -s
a fost schimbat pentru a nu fi lacom.
Acum executați aceeași comandă în Ubuntu iar rezultatul va fi lacom. Asta pentru ca coloană comanda (bsdmainutils) pe Ubuntu va trata mai multe cuvinte adiacente ca un singur cuvânt.
$ column -s ":" -t / etc / passwd.
Pentru a depăși acest comportament, folosiți-vă -n
steag.
$ column -t -s ":" -n / etc / passwd # Numai pe Debian / Ubuntu.
Când aveți linii goale în fișierul de intrare, comanda de coloană implicit o ignoră. Vedeți fișierul meu de intrare, care este în format CSV și am adăugat o linie goală între fiecare linie. Acum să creăm un tabel așa cum am făcut înainte cu acest fișier de intrare.
$ column -t -s ";" manechin.txt.
Din imaginea de mai sus puteți vedea fișierul meu de intrare manechin.txt are linii goale și când încerc să creez un tabel, liniile goale sunt ignorate.
Notă: Acesta este comportamentul implicit atât pentru „bsdmainutils / util-linux”Variantă a coloană comanda. Dar coloană (bsdmainutils) are opțiunea de a suprascrie acest comportament prin trecere -e
steag.
$ column -e -t -s "," dummy.txt # Numai pe Debian / Ubuntu.
Din imaginea de mai sus, puteți vedea că tabelul este formatat corect și că liniile goale nu sunt ignorate.
În mod implicit, două spații albe vor fi utilizate ca separatoare de ieșire. Acest comportament poate fi anulat prin trecere -o
steag. Nu veți avea o opțiune separator de ieșire disponibilă în coloană (bsdmainutils).
$ column -t -s "," -o "||" dummy.txt # Numai pe distribuția bazată pe Rhel.
Folosind -X
steagul puteți converti rândurile în coloane. Acest comportament este același în ambele rhel și ubuntu variante ale comenzii coloanei. Aceasta este o caracteristică foarte utilă atunci când trebuie să apucați un anumit câmp prin awk sau comanda de coloană, apoi convertiți-o în antet pentru fișierul dvs. CSV.
$ column -x fillcols.txt.
Când rulați coloană comanda fără a utiliza niciun semnalizator, comportamentul va fi același cu trecerea -X
steag.
coloană utilizează o variabilă de mediu ($ COLUMNE)
pentru a afla dimensiunea terminalului dvs. și în funcție de dimensiune utilizați comanda ecou, dimensiunea tabelului va fi afișată în terminal.
$ echo $ COLOANE.
Uitați-vă la imaginea de mai jos. Inițial, mi-am redimensionat terminalul $ COLOANE
dimensiunea setată la 60 și a rulat comanda coloană. Din nou, mi-am redimensionat terminalul $ COLOANE
dimensiunea setată la 114 și a rulat din nou comanda de coloană. Puteți vedea diferența în modul în care coloana imprimă tabelul atunci când redimensionăm terminalul.
$ column -t -s ":" / etc / passwd | capul 5.
Gata pentru acest articol. Dacă aveți feedback, vă rugăm să îl furnizați în secțiunea de comentarii.