Njia tofauti za Kutumia Amri ya Safu kwenye Linux


Umewahi kuwa katika hali ya kufanya kazi na faili za CSV na kutoa matokeo katika umbizo la jedwali lililopangwa? Hivi majuzi nilikuwa nikifanya kazi na utakaso wa data kwenye faili ambayo haiko katika muundo sahihi. Inayo nafasi nyingi nyeupe kati ya kila safu na lazima niibadilishe kuwa umbizo la CSV ili kusukuma kwenye hifadhidata. Baada ya kusafisha na kuunda pato katika umbizo la CSV, pato langu halivutii machoni ili kuthibitisha uadilifu wa data katika faili ya CSV. Huu ndio wakati ambapo amri ya \Safuwima inakuja kwangu.

Kulingana na manpage, amri ya safuwima \orodha safu. Kwa maneno rahisi, safu wima ni matumizi rahisi ambayo yanaweza kuunda towe lako katika umbizo la safu (safu na nyuga) kulingana na muundo wa faili yako chanzo. Amri ya safu ni sehemu ya util-linux kifurushi.

Jambo muhimu la kuzingatia hapa ni amri ya safu inatenda tofauti katika ripoti ya mdudu kujua zaidi kuhusu hili.

$ dpkg -S $(which column)

Kwa madhumuni ya onyesho, ninatumia CentOS 7 na nitaonyesha chaguo tofauti kati ya Ubuntu na CentOS 7. Kuangalia toleo la safu endesha amri ifuatayo. Amri hii pia itaonyesha toleo la kifurushi cha util-linux.

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

Unaweza pia kuangalia toleo la util-linux kwa kuendesha amri zilizo hapa chini.

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

Kabla ya kutumia safu amri mahali pazuri pa kuanzia patakuwa ukurasa wa mtu na kuchunguza chaguzi zake.

$ man column

Orodhesha Maudhui ya Faili katika Umbizo la Jedwali

Amri ya safu wima inaweza kuunda jedwali kwa kupitisha jina la faili kama hoja pamoja na -t bendera. Ninatumia /etc/passwd kama faili ya kuingiza.

$ column -t /etc/passwd

Ukiangalia picha iliyo hapo juu, unaweza kufikiria kuwa hii sio tu tuliyotarajia na matokeo yanaweza kuonekana kuwa ya kushangaza. Ndiyo! Uko sahihi. Safu wima huzingatia nafasi kama kikomo chaguo-msingi wakati wa kuunda jedwali. Tabia hii inaweza kubatilishwa kwa kupitisha kikomo maalum.

Delimeter Maalum

Vitenganishi maalum hukupa chaguzi mbalimbali za kufanya kazi nazo. Ili kuunda kikomo maalum tumia alama ya -s ikifuatiwa na kikomo. Sasa tutatumia \:” kama kikomo ili kugawanya faili /etc/passwd.

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

Angalia picha hapo juu ambapo jedwali limeundwa vizuri na limeundwa. Kutoka kwa util-linux toleo la 2.23 chaguo -s limebadilishwa kuwa lisiwe la pupa.

Sasa endesha amri sawa katika Ubuntu na matokeo yatakuwa ya uchoyo. Hii ni kwa sababu amri ya safu (bsdmainutils) kwenye Ubuntu itashughulikia maneno mengi ya karibu kama neno moja.

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

Ili kuondokana na tabia hii tumia alama ya -n.

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

Puuza Mistari Nyeupe Tupu katika Toleo la Faili

Unapokuwa na mistari tupu katika faili yako ya ingizo, amri ya safuwima kwa chaguo-msingi huipuuza. Tazama faili yangu ya ingizo ambayo iko katika umbizo la CSV na niliongeza laini tupu kati ya kila mstari. Sasa hebu tuunde jedwali kama tulivyofanya hapo awali na faili hii ya ingizo.

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

Kutoka kwa picha iliyo hapo juu unaweza kuona faili yangu ya ingizo dummy.txt ina mistari tupu na ninapojaribu kuunda jedwali, mistari tupu hupuuzwa.

Kumbuka: Hii ndiyo tabia chaguo-msingi ya lahaja ya \bsdmainutils/util-linux ya amri ya safu wima. Lakini safu wima (bsdmainutils) ina chaguo la kubatilisha tabia hii kwa kupitisha -e bendera.

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

Kutoka kwa picha iliyo hapo juu, unaweza kuona jedwali limepangwa vizuri na mistari tupu haijapuuzwa.

Kitenganishi cha Pato la Faili

Kwa chaguo-msingi, nafasi mbili nyeupe zitatumika kama vitenganishi vya pato. Tabia hii inaweza kubatilishwa kwa kupitisha alama ya -o. Hutakuwa na chaguo la kitenganishi cha pato linalopatikana kwenye safu wima (bsdmainutils).

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

Badilisha Safu Mlalo kuwa Safu wima

Kwa kutumia -x bendera unaweza kubadilisha safu mlalo kuwa safu wima. Tabia hii ni sawa katika anuwai za rhel na ubuntu za amri ya safu. Hiki ni kipengele muhimu sana inapobidi kunyakua uga fulani kupitia awk au safu amri kisha uibadilishe kuwa kichwa cha faili yako ya CSV.

$ column -x fillcols.txt

Unapoendesha amri ya safu bila kutumia bendera yoyote tabia itakuwa sawa na kupitisha -x bendera.

Pata Ukubwa wa Safu

Safu hii hutumia kigezo cha mazingira ($COLUMNS) ili kujua ukubwa wa terminal yako na kulingana na ukubwa wa matumizi ya amri ya mwangwi, saizi ya jedwali itaonyeshwa kwenye terminal.

$ echo $COLUMNS

Tazama picha hapa chini. Hapo awali, nilibadilisha ukubwa wa terminal yangu kuwa $COLUMNS saizi iliyowekwa hadi 60 na kutekeleza amri ya safu wima. Tena nilibadilisha ukubwa wa terminal yangu kuwa na $COLUMNS saizi iliyowekwa hadi 114 na nikaendesha amri ya safu tena. Unaweza kuona tofauti katika jinsi safu huchapisha meza tunapobadilisha ukubwa wa terminal.

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

Hiyo ni kwa makala hii. Ikiwa una maoni yoyote tafadhali yape katika sehemu ya maoni.