Različiti načini korištenja naredbe za kolonu u Linuxu


Jeste li ikada bili u situaciji da radite sa CSV datotekama i proizvodite izlaz u strukturiranom tabelarnom formatu? Nedavno sam radio na čišćenju podataka na datoteci koja nije u odgovarajućoj strukturi. Ima toliko razmaka između svake kolone i moram da ga konvertujem u CSV format da bih ga prebacio u bazu podataka. Nakon čišćenja i kreiranja izlaza u CSV formatu, moj izlaz nije vizuelno privlačan za provjeru integriteta podataka u CSV datoteci. Ovo je trenutak kada mi komanda “Kolona” dobro dođe.

Prema man stranici, naredba kolonacolumnate lists ”. Jednostavnim riječima, kolona je jednostavan uslužni program koji može formatirati vaš izlaz u format kolona (redovi i polja) na osnovu strukture vašeg izvornog fajla. Komanda kolona je dio util-linux paketa.

Ovdje je važno napomenuti da se naredba column ponaša drugačije u distribucijama baziranim na Debianu i Rhel. Razlog je to što distribucija bazirana na Debianu koristi “kolona ” iz bsdmainutils umjesto util-linuxa. Upstream verzija naredbe column je novija od paketa bsdmainutils. Pogledajte izvještaj o greškama da biste saznali više o tome.

dpkg -S $(which column)

U svrhu demonstracije, koristim CentOS 7 i prikazat ću različite opcije između Ubuntu i CentOS 7. Da provjerite verziju kolone pokrenite sljedeću naredbu. Ova komanda će također prikazati verziju paketa util-linux.

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

Takođe možete provjeriti verziju util-linuxa tako što ćete pokrenuti donje naredbe.

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

Prije upotrebe naredbe kolona, dobro mjesto za početak je man stranica i istraživanje njenih opcija.

man column

Navedite sadržaj datoteke u tabelarnom formatu

Komanda kolona može kreirati tabelu prenošenjem imena datoteke kao argumenta zajedno sa zastavom -t. Koristim /etc/passwd kao ulazni fajl.

column -t /etc/passwd

Gledajući gornju sliku, možda mislite da ovo nije ono što smo očekivali, a rezultat bi mogao izgledati čudno. Da! Upravu si. Kolone smatraju razmak zadanim graničnikom prilikom kreiranja tabele. Ovo ponašanje se može poništiti prosljeđivanjem prilagođenog graničnika.

Prilagođeni delimetar

Prilagođeni graničnici daju vam širok raspon opcija za rad. Za kreiranje prilagođenog graničnika koristite -s zastavicu nakon koje slijedi graničnik. Sada ćemo koristiti “: ” kao graničnik za podjelu datoteke /etc/passwd.

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

Pogledajte gornju sliku gdje je tabela lijepo formatirana i strukturirana. Od util-linux verzije 2.23 opcija -s je promijenjena da ne bude pohlepna.

Sada pokrenite istu komandu u Ubuntu i rezultat će biti pohlepan. To je zato što će naredba kolona (bsdmainutils) na Ubuntu tretirati više susjednih riječi kao jednu riječ.

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

Za prevazilaženje ovog ponašanja koristite oznaku -n.

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

Zanemarite bijele prazne linije u izlazu datoteke

Kada imate prazne redove u vašoj ulaznoj datoteci, naredba stupca po defaultu to ignoriše. Pogledajte moj ulazni fajl koji je u CSV formatu i dodao sam prazan red između svakog reda. Sada kreirajmo tabelu kao što smo ranije radili sa ovom ulaznom datotekom.

column -t -s ";" dummy.txt

Sa gornje slike možete vidjeti da moj ulazni fajl dummy.txt ima prazne redove i kada pokušam da kreiram tabelu, prazne linije se zanemaruju.

Napomena: Ovo je zadano ponašanje za obje “bsdmainutils/util-linux” varijante naredbe kolona. Ali kolona (bsdmainutils) ima opciju da poništi ovo ponašanje prenošenjem oznake -e.

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

Iz gornje slike možete vidjeti da je tabela pravilno formatirana i da se prazni redovi ne zanemaruju.

File Output Separator

Podrazumevano, dva razmaka će se koristiti kao izlazni separatori. Ovo ponašanje se može poništiti prosljeđivanjem oznake -o. Nećete imati opciju razdvajanja izlaza dostupnu u koloni (bsdmainutils).

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

Pretvorite redove datoteke u kolone

Koristeći zastavu -x možete pretvoriti redove u stupce. Ovo ponašanje je isto u rhel i ubuntu varijantama naredbe stupca. Ovo je veoma korisna funkcija kada morate da zgrabite određeno polje preko komande awk ili column, a zatim ga konvertujete u zaglavlje vaše CSV datoteke.

column -x fillcols.txt

Kada pokrenete naredbu kolona bez korištenja zastavica, ponašanje će biti isto kao i prosljeđivanje zastavice -x.

Pronađite veličinu kolone

Kolona koristi varijablu okruženja ($COLUMNS) da sazna veličinu vašeg terminala i na osnovu veličine koristite komandu echo, veličina tabele će biti prikazana u terminalu .

echo $COLUMNS

Pogledajte sliku ispod. U početku sam promijenio veličinu terminala tako da ima $COLUMNS veličinu postavljenu na 60 i pokrenuo naredbu stupca. Opet sam promijenio veličinu svog terminala da ima $COLUMNS veličinu postavljenu na 114 i ponovo pokrenuo naredbu stupca. Možete vidjeti razliku u tome kako kolona ispisuje tablicu kada promijenimo veličinu terminala.

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

To je to za ovaj članak. Ako imate bilo kakve povratne informacije, navedite ih u odjeljku za komentare.