Erinevad viisid veerukäsu kasutamiseks Linuxis


Kas olete kunagi olnud olukorras, kus saate töötada CSV-failidega ja toota struktureeritud tabelivormingus väljundit? Hiljuti töötasin andmete puhastamisega failis, mis pole nõuetekohases struktuuris. Sellel on iga veeru vahel nii palju tühimikke ja andmebaasi sisestamiseks pean selle teisendama CSV-vormingusse. Pärast CSV-vormingus väljundi puhastamist ja loomist pole minu väljund CSV-failis andmete terviklikkuse kontrollimiseks visuaalselt meeldiv. See on aeg, kui käsk „Veerg“ tuleb mulle kasuks.

Manpage'i järgi on veerukäsu “columnate list”. Lihtsamate sõnadega on veerg lihtne utiliit, mis saab teie väljundi vormindada veergude vorminguks (read ja väljad) lähtefaili struktuuri põhjal. Veeru käsk on osa paketist util-linux.

Oluline on siinkohal märkida, et veerukäsk käitub veaaruandes erinevalt, et sellest rohkem teada saada.

$ dpkg -S $(which column)

Demonstreerimise eesmärgil kasutan CentOS 7 ja näitan erinevaid võimalusi Ubuntu ja CentOS 7 vahel. Veergude versiooni kontrollimiseks käivitage järgmine käsk. See käsk näitab ka paketi util-linux versiooni.

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

Samuti saate kontrollida util-linuxi versiooni, käivitades alltoodud käsud.

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

Enne veerukäsu kasutamist on hea alustada man-lehel ja uurida selle võimalusi.

$ man column

Loetlege faili sisu tabelivormingus

Veerukäsu abil saab luua tabeli, edastades failinime argumendina koos lipuga -t . Kasutan sisendfailina/etc/passwd.

$ column -t /etc/passwd

Ülaltoodud pilti vaadates võite arvata, et see pole see, mida me ootasime, ja väljund võib tunduda imelik. Jah! Sul on õigus. Veerud arvestavad tabeli loomisel vaikeriba eraldajaga. Selle käitumise saab tühistada, kui edastate kohandatud eraldaja.

Kohandatud delimeeter

Kohandatud eraldajad annavad teile töötamiseks laia valiku võimalusi. Kohandatud eraldaja loomiseks kasutage lippu -s , millele järgneb eraldaja. Nüüd kasutame faili/etc/passwd eraldamiseks eraldajat “:” .

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

Vaadake ülaltoodud pilti, kus tabel on kenasti vormindatud ja struktureeritud. Alates util-Linuxi versioonist 2.23 on valik -s muudetud mitte ahneks.

Nüüd käivitage sama käsk Ubuntus ja tulemus on ahne. Selle põhjuseks on asjaolu, et Ubuntu veerukäsu (bsdmainutils) käsitletakse mitut külgnevat sõna ühe sõnana.

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

Selle käitumise ületamiseks kasutage lippu -n .

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

Ignoreeri failiväljundis valgeid tühje ridu

Kui sisendfailis on tühjad read, ignoreerib vaikimisi käsk veerg seda. Vaadake minu sisendfaili, mis on CSV-vormingus, ja lisasin iga rea vahele tühja rea. Nüüd loome tabeli, nagu me selle sisendfailiga varem tegime.

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

Ülaltoodud pildilt näete, et minu sisendfailil dummy.txt on tühje ridu ja kui proovin tabelit luua, ignoreeritakse tühje ridu.

Märkus. See on veerukäsu mõlema variandi „bsdmainutils/util-linux” vaikekäitumine. Kuid veerul (bsdmainutils) on võimalus see käitumine alistada, edastades lipu -e .

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

Ülaltoodud pildilt näete, et tabel on õigesti vormindatud ja tühje ridu ei eirata.

Faili väljundi eraldaja

Vaikimisi kasutatakse väljundi eraldajatena kahte tühikut. Selle käitumise saab tühistada, kui edastate lipu -o . Teil pole veerus väljundi eraldaja valikut (bsdmainutils) saadaval.

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

Teisendage failiread veergudeks

Lipu -x abil saate ridu veerudeks teisendada. See käitumine on sama nii veeru käsu rhel kui ka ubuntu variantides. See on väga kasulik funktsioon, kui peate käsu awk või column abil haarama teatud välja ja teisendama selle oma CSV-faili päiseks.

$ column -x fillcols.txt

Kui käivitate käsu veerg ilma lippe kasutamata, on käitumine sama mis lipu -x edastamisel.

Leidke veeru suurus

Veerg kasutab terminali suuruse väljaselgitamiseks keskkonnamuutujat ($COLUMNS) ja käsu echo suuruse põhjal kuvatakse terminalis tabeli suurus.

$ echo $COLUMNS

Heitke pilk allpool olevale pildile. Esialgu muutsin oma terminali suuruseks $COLUMNS , mille suuruseks oli seatud 60, ja käskisin veeru. Jällegi muutsin oma terminali suuruseks $COLUMNS , mille suurus oli 114 ja käskisin veeru uuesti. Terminali suuruse muutmisel näete erinevust selles, kuidas veerg tabeli prindib.

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

See on selle artikli jaoks. Kui teil on tagasisidet, esitage see kommentaaride jaotises.