Mismunandi leiðir til að nota dálkaskipun í Linux


Hefur þú einhvern tíma lent í því að vinna með CSV skrár og framleiða úttak á skipulögðu töfluformi? Nýlega var ég að vinna með gagnahreinsun á skrá sem er ekki í réttri uppbyggingu. Það eru svo mörg hvít bil á milli hvers dálks og ég þarf að breyta því í CSV snið til að ýta í gagnagrunninn. Eftir að hafa hreinsað og búið til úttakið á CSV sniði er framleiðsla mín ekki sjónrænt aðlaðandi til að sannreyna heilleika gagna í CSV skránni. Þetta er tíminn sem skipunin „Dálkur“ kemur mér að góðum notum.

Samkvæmt manpage er dálkaskipunin \dálkalistar. Í einföldum orðum er dálkurinn einfalt tól sem getur sniðið úttak þitt í dálksnið (raðir og reitir) byggt á uppbyggingu frumskrárinnar. Dálkskipunin er hluti af util-linux pakkanum.

Mikilvægt atriði til að hafa í huga hér er dálkaskipun hegðar sér öðruvísi í villuskýrslu til að vita meira um þetta.

$ dpkg -S $(which column)

Í sýnikennslu nota ég CentOS 7 og mun sýna mismunandi valkosti á milli Ubuntu og CentOS 7. Til að athuga dálkaútgáfuna skaltu keyra eftirfarandi skipun. Þessi skipun mun einnig sýna util-linux pakkann.

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

Þú getur líka athugað útgáfuna af util-linux með því að keyra skipanirnar hér að neðan.

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

Áður en dálkskipunin er notuð er góður staður til að byrja að vera mansíðan og kanna valkosti hennar.

$ man column

Listaðu skráarefni á töfluformi

Dálkskipunin getur búið til töflu með því að senda skráarnafnið sem rök ásamt -t fánanum. Ég er að nota /etc/passwd sem inntaksskrá.

$ column -t /etc/passwd

Þegar þú horfir á myndina hér að ofan gætirðu haldið að þetta sé ekki það sem við bjuggumst við og framleiðslan gæti litið undarlega út. Já! Þú hefur rétt fyrir þér. Dálkar líta á pláss sem sjálfgefið afmörkun þegar búið er til töflu. Hægt er að hnekkja þessari hegðun með því að senda sérsniðið afmörkun.

Sérsniðin delimeter

Sérsniðin afmörkun gefur þér fjölbreytt úrval af valkostum til að vinna með. Til að búa til sérsniðið afmörkun skaltu nota -s fána og síðan afmarka. Nú munum við nota \:” sem afmörkun til að skipta /etc/passwd skrá.

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

Horfðu á myndina hér að ofan þar sem taflan er fallega sniðin og uppbyggð. Frá util-linux útgáfu 2.23 hefur valmöguleikanum -s verið breytt til að vera ekki gráðugur.

Keyrðu nú sömu skipunina í Ubuntu og niðurstaðan verður gráðug. Þetta er vegna þess að dálkaskipun (bsdmainutils) á Ubuntu mun meðhöndla mörg samliggjandi orð sem eitt orð.

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

Notaðu -n fána til að sigrast á þessari hegðun.

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

Hunsa hvítar tómar línur í skráarúttak

Þegar þú ert með auðar línur í innsláttarskránni þinni hunsar dálkskipunin hana sjálfgefið. Sjá innsláttarskrána mína sem er á CSV sniði og ég bætti auðri línu á milli hverrar línu. Nú skulum við búa til töflu eins og við gerðum áður með þessari inntaksskrá.

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

Af myndinni hér að ofan má sjá innsláttarskrána mína dummy.txt hefur tómar línur og þegar ég reyni að búa til töflu eru tómar línur hunsaðar.

Athugið: Þetta er sjálfgefin hegðun fyrir bæði \bsdmainutils/util-linux afbrigði dálkskipunarinnar. En dálkur (bsdmainutils) hefur möguleika á að hnekkja þessari hegðun með því að senda -e fána.

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

Af myndinni hér að ofan geturðu séð að taflan er rétt sniðin og tómar línur eru ekki hunsaðar.

File Output Separator

Sjálfgefið er að tvö hvít rými verða notuð sem úttaksskil. Hægt er að hnekkja þessari hegðun með því að senda -o fána. Þú munt ekki hafa valkost fyrir úttaksskilju tiltækan í dálknum (bsdmainutils).

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

Umbreyttu skráarlínum í dálka

Með því að nota -x fánann geturðu umbreytt línum í dálka. Þessi hegðun er sú sama í bæði rhel og ubuntu afbrigðum dálkaskipunarinnar. Þetta er mjög gagnlegur eiginleiki þegar þú þarft að grípa ákveðinn reit í gegnum awk eða dálk skipunina og breyta því síðan í hausinn fyrir CSV skrána þína.

$ column -x fillcols.txt

Þegar þú keyrir dálkaskipunina án þess að nota neina fána verður hegðunin sú sama og að senda -x fána.

Finndu dálkstærð

Dálkurinn notar umhverfisbreytu ($COLUMNS) til að finna út stærð flugstöðvarinnar þinnar og miðað við stærðina skaltu nota echo skipunina, stærð töflunnar birtist í flugstöðinni.

$ echo $COLUMNS

Skoðaðu myndina hér að neðan. Upphaflega breytti ég stærð flugstöðvarinnar minnar til að hafa $COLUMNS stærðina stillta á 60 og keyrði dálkskipunina. Aftur breytti ég stærð flugstöðvarinnar minnar til að hafa $COLUMNS stærðina stillta á 114 og keyrði dálkskipunina aftur. Þú getur séð muninn á því hvernig dálkurinn prentar töfluna þegar við breytum stærð flugstöðvarinnar.

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

Það er það fyrir þessa grein. Ef þú hefur einhverjar athugasemdir vinsamlegast gefðu það í athugasemdareitnum.