Eri tapoja käyttää sarakekomentoa Linuxissa


Oletko koskaan ollut tilanteessa työskennellä CSV-tiedostojen kanssa ja tuottaa tulosta jäsennetyssä taulukkomuodossa? Viime aikoina työskentelin datan puhdistamisen kanssa tiedostossa, joka ei ole kunnossa. Siinä on niin paljon välilyöntejä jokaisen sarakkeen välillä, ja minun on muunnettava se CSV-muotoon siirtyäksesi tietokantaan. Puhdistuksen ja CSV-muodon luomisen jälkeen lähtöni ei ole visuaalisesti houkutteleva tietojen eheyden tarkistamiseksi CSV-tiedostossa. Tämä on aika, jolloin “Sarake” -komento on minulle hyödyllinen.

Manpagen mukaan sarakekomento “columnate list”. Yksinkertaisesti sanoen, sarake on yksinkertainen apuohjelma, joka voi muotoilla tuloksen sarakemuotoon (rivit ja kentät) lähdetiedoston rakenteen perusteella. Sarakekomento on osa util-linux-pakettia.

Tärkeä huomioitava seikka on sarakekomento, joka käyttäytyy eri tavalla virheraportissa saadakseen tietää enemmän tästä.

$ dpkg -S $(which column)

Esittelytarkoituksiin käytän CentOS 7: ää ja näytän erilaisia vaihtoehtoja Ubuntun ja CentOS 7: n välillä. Suorita seuraava komento sarakeversion tarkistamiseksi. Tämä komento näyttää myös util-linux-paketin version.

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

Voit myös tarkistaa util-linux-version suorittamalla alla olevat komennot.

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

Ennen sarakekomennon käyttöä on hyvä aloittaa man-sivu ja tutkia sen vaihtoehtoja.

$ man column

Luettele tiedostosisältö taulukkomuodossa

Sarakekomento voi luoda taulukon välittämällä tiedostonimen argumenttina -t -lipun kanssa. Käytän tiedostoa/etc/passwd syötetiedostona.

$ column -t /etc/passwd

Yllä olevaa kuvaa tarkasteltaessa saatat ajatella, että tämä ei ole sitä mitä odotimme, ja tulos saattaa näyttää oudolta. Joo! Olet oikeassa. Sarakkeet pitävät välilyöntiä oletuserottimena taulukkoa luodessa. Tämä käyttäytyminen voidaan ohittaa välittämällä mukautettu erotin.

Custom Delimeter

Mukautetut erottimet tarjoavat sinulle laajan valikoiman vaihtoehtoja työskennellä. Luo mukautettu erotin käyttämällä -s -merkkiä ja sen jälkeen erotinta. Nyt käytämme “:” -merkkiä jakamaan/etc/passwd-tiedosto.

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

Katso yllä olevaa kuvaa, jossa taulukko on hienosti muotoiltu ja jäsennelty. Use-linux-version 2.23 vaihtoehdosta -s on muutettu olemaan ahne.

Suorita nyt sama komento Ubuntussa ja tulos on ahne. Tämä johtuu siitä, että Ubuntun sarakekomento (bsdmainutils) käsittelee useita vierekkäisiä sanoja yhtenä sanana.

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

Voit ratkaista tämän käyttäytymisen käyttämällä -n -lippua.

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

Ohita valkoiset tyhjät viivat tiedostotiedostossa

Kun syötetiedostossa on tyhjiä rivejä, sarakekomento ohittaa sen oletuksena. Katso syötetiedostoni, joka on CSV-muodossa, ja lisäsin tyhjän rivin jokaisen rivin väliin. Luodaan nyt taulukko, kuten teimme aiemmin tällä syötetiedostolla.

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

Yllä olevasta kuvasta näet, että syötetiedostossani dummy.txt on tyhjiä rivejä, ja kun yritän luoda taulukkoa, tyhjät rivit jätetään huomioimatta.

Huomaa: Tämä on oletusarvo sarakekomennon molemmille bsdmainutils/util-linux-muunnelmille. Sarakkeella (bsdmainutils) on kuitenkin mahdollisuus ohittaa tämä toiminta välittämällä -e -lippu.

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

Yllä olevasta kuvasta näet, että taulukko on muotoiltu oikein eikä tyhjiä rivejä jätetä huomiotta.

Tiedostolähdön erotin

Oletuksena kahta välilyöntiä käytetään erottimena. Tämä ongelma voidaan ohittaa välittämällä -o -lippu. Sarakkeessa ei ole käytettävissä erotteluvaihtoehtoa (bsdmainutils).

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

Muunna tiedostorivit sarakkeiksi

Lippua -x käyttämällä voit muuntaa rivit sarakkeiksi. Tämä käyttäytyminen on sama sarakekomennon sekä rhel- että ubuntu-muunnelmissa. Tämä on erittäin hyödyllinen ominaisuus, kun joudut tarttumaan tiettyyn kenttään awk- tai sarakekomennon kautta ja muuntamaan sen sitten CSV-tiedostosi otsikkoon.

$ column -x fillcols.txt

Kun suoritat sarakekomennon ilman lippuja, käyttäytyminen on sama kuin -x -lipun välittäminen.

Etsi sarakkeen koko

Sarake käyttää ympäristömuuttujaa ($COLUMNS) selvittääkseen päätelaitteen koon, ja taulukon koko näkyy echo-komennon perusteella päätelaitteessa.

$ echo $COLUMNS

Katsokaa alla olevaa kuvaa. Aluksi muutin päätelaitteeni kokoa siten, että $COLUMNS -kokoksi asetettiin 60 ja suoritin sarakekomennon. Jälleen muutin päätelaitteeni kokoa $COLUMNS -asetukseksi 114 ja suoritin sarakekomennon uudelleen. Näet eron siinä, kuinka sarake tulostaa taulukon, kun muutamme päätelaitteen kokoa.

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

Se on tässä artikkelissa. Jos sinulla on palautetta, lähetä se kommenttiosioon.