Nagkalainlain nga mga Paagi sa Paggamit sa Column Command sa Linux


Nakaadto ka na ba sa usa ka sitwasyon aron magtrabaho uban ang mga CSV file ug maghimo og output sa structured tabular format? Bag-ohay lang nagtrabaho ako sa paglimpyo sa datos sa usa ka file nga wala sa husto nga istruktura. Adunay daghan kaayo nga mga whitespaces tali sa matag kolum ug kinahanglan nako nga i-convert kini sa CSV format aron iduso sa database. Human sa paglimpyo ug paghimo sa output sa CSV format, ang akong output dili makita nga madanihon sa pagmatuod sa data integridad sa CSV file. Kini ang panahon nga ang \Column nga mando magamit alang kanako.

Sumala sa manpage, ang column command \columnate lists. Sa yano nga mga pulong, ang column kay usa ka simple nga utility nga maka-format sa imong output ngadto sa column format (mga row ug fields) base sa structure sa imong source file. Ang column command kay bahin sa util-linux package.

Ang usa ka hinungdanon nga punto nga timan-an dinhi mao ang kolum nga komand nga lahi ang pamatasan sa report sa bug aron mahibal-an ang dugang bahin niini.

$ dpkg -S $(which column)

Alang sa mga katuyoan sa demonstrasyon, gigamit nako ang CentOS 7 ug magpakita sa lainlaing mga kapilian tali sa Ubuntu ug CentOS 7. Aron masusi ang bersyon sa kolum ipadagan ang mosunud nga mando. Kini nga sugo magpakita usab sa util-linux package nga bersyon.

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

Mahimo usab nimong susihon ang bersyon sa util-linux pinaagi sa pagpadagan sa mga sugo sa ubos.

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

Sa wala pa gamiton ang kolum nga komand usa ka maayong lugar nga magsugod mao ang panid sa tawo ug susihon ang mga kapilian niini.

$ man column

Ilista ang Kontento sa File sa Tabular nga Format

Ang kolum nga command makahimo og lamesa pinaagi sa pagpasa sa filename isip argumento uban sa -t flag. Gigamit nako ang /etc/passwd isip input file.

$ column -t /etc/passwd

Sa pagtan-aw sa imahe sa ibabaw, mahimo nimong hunahunaon nga dili kini ang among gipaabut ug ang output mahimo’g katingad-an. Oo! Husto ka. Giisip sa mga kolum ang wanang isip default delimiter kung maghimo usa ka lamesa. Kini nga kinaiya mahimong ma-override pinaagi sa pagpasa sa usa ka custom delimiter.

Pasadya nga Delimeter

Ang mga pasadya nga delimiter naghatag kanimo usa ka halapad nga kapilian nga magamit. Para maghimo ug custom delimiter gamita ang -s flag nga gisundan ug delimiter. Karon atong gamiton ang \:” isip delimiter sa pagbahin sa /etc/passwd file.

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

Tan-awa ang hulagway sa ibabaw diin ang lamesa maayong pagkaporma ug pagkahan-ay. Gikan sa util-linux nga bersyon 2.23 nga opsyon -s giusab aron dili hakog.

Karon ipadagan ang parehas nga mando sa Ubuntu ug ang resulta mahimong hakog. Kini tungod kay ang kolum nga command (bsdmainutils) sa Ubuntu magtratar sa daghang kasikbit nga mga pulong isip usa ka pulong.

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

Aron mabuntog kini nga pamatasan gamita ang -n bandila.

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

Ibaliwala ang White Empty Lines sa File Output

Kung adunay mga blangko nga linya sa imong input file, ang kolum nga komand sa default wala magtagad niini. Tan-awa ang akong input file nga naa sa CSV format ug gidugang nako ang blangko nga linya tali sa matag linya. Karon maghimo kita og usa ka lamesa sama sa atong gibuhat kaniadto sa kini nga input file.

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

Gikan sa ibabaw nga hulagway imong makita ang akong input file nga dummy.txt adunay walay sulod nga mga linya ug sa diha nga ako mosulay sa paghimo sa usa ka lamesa, walay sulod nga mga linya wala panumbalinga.

Pahinumdom: Kini ang default nga kinaiya alang sa duha nga \bsdmainutils/util-linux nga variant sa column command. Apan ang column (bsdmainutils) adunay opsyon sa pag-override niini nga kinaiya pinaagi sa pagpasa sa -e flag.

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

Gikan sa hulagway sa ibabaw, imong makita nga ang lamesa naporma sa hustong paagi ug ang walay sulod nga mga linya wala gibalewala.

File Output Separator

Sa kasagaran, duha ka puti nga mga luna ang gamiton isip output separator. Kini nga kinaiya mahimong ma-override pinaagi sa pagpasa sa -o nga bandila. Wala ka'y opsyon sa output separator nga anaa sa kolum (bsdmainutils).

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

I-convert ang File Rows ngadto sa Columns

Gamit ang -x ang bandila mahimo nimong i-convert ang mga laray ngadto sa mga kolum. Kini nga kinaiya parehas sa rhel ug ubuntu nga mga variant sa kolum nga sugo. Kini usa ka mapuslanon kaayo nga bahin kung kinahanglan nimo nga makuha ang usa ka piho nga natad pinaagi sa awk o kolum nga mando unya i-convert kini sa header alang sa imong CSV file.

$ column -x fillcols.txt

Kung gipadagan nimo ang kolum nga mando nga wala mogamit bisan unsang mga bandera ang pamatasan mahimong parehas sa pagpasa sa -x nga bandila.

Pangitaa ang Laki sa Kolum

Ang kolum naggamit ug environmental variable ($COLUMNS) aron mahibal-an ang gidak-on sa imong terminal ug base sa gidak-on gamita ang echo command, ang gidak-on sa lamesa ipakita sa terminal.

$ echo $COLUMNS

Tan-awa ang hulagway sa ubos. Sa sinugdan, gibag-o nako ang akong terminal aron adunay $COLUMNS ang gidak-on nga gibutang sa 60 ug gipadagan ang kolum nga sugo. Gibag-o nako pag-usab ang akong terminal aron adunay $COLUMNS ang gidak-on nga gibutang sa 114 ug gipadagan pag-usab ang kolum nga command. Makita nimo ang kalainan kung giunsa pag-imprinta sa kolum ang lamesa kung gibag-o namon ang terminal.

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

Mao kana alang niini nga artikulo. Kung naa kay feedback palihog ihatag sa comment section.