Skirtingi stulpelio komandos naudojimo būdai sistemoje „Linux“.


Ar kada nors teko dirbti su CSV failais ir kurti išvestį struktūrizuotu lentelės formatu? Neseniai dirbau su duomenų valymu faile, kurio struktūra nėra tinkama. Tarp kiekvieno stulpelio yra tiek daug tarpų, todėl turiu konvertuoti jį į CSV formatą, kad perkelčiau į duomenų bazę. Išvalius ir sukūrus išvestį CSV formatu, mano išvestis nėra vizualiai patraukli, kad būtų galima patikrinti duomenų vientisumą CSV faile. Šiuo metu man praverčia komanda „Stulpelis“.

Pagal man puslapį, komanda stulpelisstulpelio sąrašai“. Paprastais žodžiais tariant, stulpelis yra paprastas įrankis, galintis suformatuoti išvestį stulpelio formatu (eilutės ir laukai), atsižvelgiant į šaltinio failo struktūrą. Komanda column yra paketo util-linux dalis.

Svarbu atkreipti dėmesį į tai, kad komanda column veikia skirtingai Debian ir Rhel pagrindu veikiančiose distribucijose. Priežastis ta, kad „Debian“ pagrindu sukurta distribucija vietoj „util-linux“ naudoja „column“ iš bsdmainutils. Komandos column versija yra naujesnė nei bsdmainutils paketas. Norėdami sužinoti daugiau apie tai, peržiūrėkite klaidų ataskaitą.

dpkg -S $(which column)

Demonstravimo tikslais naudoju CentOS 7 ir parodysiu skirtingas Ubuntu ir CentOS 7 parinktis. Norėdami patikrinti stulpelio versiją, paleiskite šią komandą. Ši komanda taip pat parodys util-linux paketo versiją.

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

Taip pat galite patikrinti util-linux versiją vykdydami toliau pateiktas komandas.

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

Prieš naudojant komandą stulpelis, gera vieta pradėti yra man puslapis ir ištirti jo parinktis.

man column

Failo turinio sąrašas lentelės formatu

Komanda stulpelis gali sukurti lentelę, perduodant failo pavadinimą kaip argumentą kartu su vėliava -t. Kaip įvesties failą naudoju /etc/passwd.

column -t /etc/passwd

Žvelgdami į aukščiau pateiktą vaizdą, galite pamanyti, kad tai nėra tai, ko tikėjomės, ir rezultatas gali atrodyti keistas. Taip! Tu teisus. Kurdami lentelę Stulpeliai laiko tarpą numatytuoju skyrikliu. Šią elgseną galima nepaisyti perduodant pasirinktinį skyriklį.

Individualus skyriklis

Pasirinktiniai skyrikliai suteikia daug galimybių dirbti. Norėdami sukurti tinkintą skyriklį, naudokite vėliavėlę -s, po kurios – skyriklį. Dabar naudosime “: ” kaip skyriklį, kad padalintume failą /etc/passwd.

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

Pažiūrėkite į aukščiau esantį paveikslėlį, kuriame lentelė yra gražiai suformatuota ir struktūrizuota. Iš util-linux 2.23 versijos parinktis -s buvo pakeista, kad nebūtų gobšus.

Dabar paleiskite tą pačią komandą Ubuntu ir rezultatas bus godus. Taip yra todėl, kad komanda column (bsdmainutils) sistemoje Ubuntu traktuos kelis gretimus žodžius kaip vieną žodį.

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

Norėdami įveikti šį elgesį, naudokite vėliavėlę -n.

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

Nepaisykite baltų tuščių eilučių failo išvestyje

Kai įvesties faile yra tuščių eilučių, stulpelio komanda pagal numatytuosius nustatymus to nepaiso. Peržiūrėkite mano įvesties failą, kuris yra CSV formatu, ir aš pridėjau tuščią eilutę tarp kiekvienos eilutės. Dabar sukurkime lentelę, kaip anksčiau su šiuo įvesties failu.

column -t -s ";" dummy.txt

Aukščiau pateiktame paveikslėlyje matote, kad mano įvesties faile dummy.txt yra tuščių eilučių, o kai bandau sukurti lentelę, į tuščias eilutes nepaisoma.

Pastaba: tai yra numatytoji elgsena bsdmainutils/util-linux komandos column variante. Tačiau stulpelis (bsdmainutils) turi galimybę nepaisyti šios elgsenos perduodant žymą -e.

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

Iš aukščiau pateikto paveikslėlio matote, kad lentelė suformatuota tinkamai, o tuščios eilutės nėra ignoruojamos.

Failų išvesties separatorius

Pagal numatytuosius nustatymus du tarpai bus naudojami kaip išvesties skyrikliai. Šią elgseną galima nepaisyti perduodant vėliavėlę -o. Neturėsite išvesties skyriklio parinkties stulpelyje (bsdmainutils).

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

Konvertuoti failo eilutes į stulpelius

Naudodami vėliavėlę -x, eilutes galite konvertuoti į stulpelius. Šis elgesys yra toks pat stulpelio komandos rhel ir ubuntu variantuose. Tai labai naudinga funkcija, kai turite patraukti tam tikrą lauką naudodami awk arba stulpelio komandą, tada konvertuoti jį į CSV failo antraštę.

column -x fillcols.txt

Kai vykdote komandą column nenaudodami jokių vėliavėlių, elgsis taip pat, kaip perduodant vėliavėlę -x.

Raskite stulpelio dydį

Stulpelyje naudojamas aplinkos kintamasis ($COLUMNS), kad sužinotų jūsų terminalo dydį, o pagal dydį naudokite komandą echo, lentelės dydis bus rodomas terminale .

echo $COLUMNS

Pažvelkite į žemiau esantį paveikslėlį. Iš pradžių pakeičiau terminalo dydį, kad $COLUMNS dydis būtų nustatytas į 60 ir paleidau stulpelio komandą. Vėl pakeičiau terminalo dydį, kad $COLUMNS dydis būtų nustatytas į 114, ir vėl paleidau stulpelio komandą. Galite pamatyti skirtumą, kaip stulpelis spausdina lentelę, kai keičiame terminalo dydį.

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

Štai tiek šiam straipsniui. Jei turite atsiliepimų, pateikite juos komentarų skiltyje.