El shell de linux: Comando column | Algo de Linux

martes, 20 de febrero de 2018

El shell de linux: Comando column

El comando column es uno de esos comandos a los que no le ves la utilidad hasta que lo necesitas, y la verdad es que es bastante útil.

Por ejemplo, supongamos que tenemos un fichero csv (comma-separated values). Para los que no lo sepan, un fichero csv es un fichero en el que existen campos de datos separados mediante un símbolo (coma, punto, dos puntos, etc...) y que utilizamos mucho a la hora de importar/exportar datos.

$ cat /usr/share/distro-info/ubuntu.csv
version,codename,series,created,release,eol,eol-server
4.10,Warty Warthog,warty,2004-03-05,2004-10-20,2006-04-30
5.04,Hoary Hedgehog,hoary,2004-10-20,2005-04-08,2006-10-31
5.10,Breezy Badger,breezy,2005-04-08,2005-10-12,2007-04-13
6.06 LTS,Dapper Drake,dapper,2005-10-12,2006-06-01,2009-07-14,2011-06-01
6.10,Edgy Eft,edgy,2006-06-01,2006-10-26,2008-04-25
7.04,Feisty Fawn,feisty,2006-10-26,2007-04-19,2008-10-19
7.10,Gutsy Gibbon,gutsy,2007-04-19,2007-10-18,2009-04-18
8.04 LTS,Hardy Heron,hardy,2007-10-18,2008-04-24,2011-05-12,2013-05-09
8.10,Intrepid Ibex,intrepid,2008-04-24,2008-10-30,2010-04-30
9.04,Jaunty Jackalope,jaunty,2008-10-30,2009-04-23,2010-10-23
9.10,Karmic Koala,karmic,2009-04-23,2009-10-29,2011-04-29
10.04 LTS,Lucid Lynx,lucid,2009-10-29,2010-04-29,2013-05-09,2015-04-29
10.10,Maverick Meerkat,maverick,2010-04-29,2010-10-10,2012-04-10
11.04,Natty Narwhal,natty,2010-10-10,2011-04-28,2012-10-28
11.10,Oneiric Ocelot,oneiric,2011-04-28,2011-10-13,2013-05-09
12.04 LTS,Precise Pangolin,precise,2011-10-13,2012-04-26,2017-04-26
12.10,Quantal Quetzal,quantal,2012-04-26,2012-10-18,2014-05-16
13.04,Raring Ringtail,raring,2012-10-18,2013-04-25,2014-01-27
13.10,Saucy Salamander,saucy,2013-04-25,2013-10-17,2014-07-17
14.04 LTS,Trusty Tahr,trusty,2013-10-17,2014-04-17,2019-04-17
14.10,Utopic Unicorn,utopic,2014-04-17,2014-10-23,2015-07-23
15.04,Vivid Vervet,vivid,2014-10-23,2015-04-23,2016-01-23
15.10,Wily Werewolf,wily,2015-04-23,2015-10-22,2016-07-22
16.04 LTS,Xenial Xerus,xenial,2015-10-22,2016-04-21,2021-04-21
16.10,Yakkety Yak,yakkety,2016-04-21,2016-10-13,2017-07-20
17.04,Zesty Zapus,zesty,2016-10-13,2017-04-13,2018-01-25
17.10,Artful Aardvark,artful,2017-04-13,2017-10-19,2018-07-19
Y queremos mostrarlo en forma de columnas. Pues bien, si hacemos uso del comando column, ésto es algo realmente sencillo:
$ column -t -s, /usr/share/distro-info/ubuntu.csv
version    codename          series    created     release     eol         eol-server
4.10       Warty Warthog     warty     2004-03-05  2004-10-20  2006-04-30
5.04       Hoary Hedgehog    hoary     2004-10-20  2005-04-08  2006-10-31
5.10       Breezy Badger     breezy    2005-04-08  2005-10-12  2007-04-13
6.06 LTS   Dapper Drake      dapper    2005-10-12  2006-06-01  2009-07-14  2011-06-01
6.10       Edgy Eft          edgy      2006-06-01  2006-10-26  2008-04-25
7.04       Feisty Fawn       feisty    2006-10-26  2007-04-19  2008-10-19
7.10       Gutsy Gibbon      gutsy     2007-04-19  2007-10-18  2009-04-18
8.04 LTS   Hardy Heron       hardy     2007-10-18  2008-04-24  2011-05-12  2013-05-09
8.10       Intrepid Ibex     intrepid  2008-04-24  2008-10-30  2010-04-30
9.04       Jaunty Jackalope  jaunty    2008-10-30  2009-04-23  2010-10-23
9.10       Karmic Koala      karmic    2009-04-23  2009-10-29  2011-04-29
10.04 LTS  Lucid Lynx        lucid     2009-10-29  2010-04-29  2013-05-09  2015-04-29
10.10      Maverick Meerkat  maverick  2010-04-29  2010-10-10  2012-04-10
11.04      Natty Narwhal     natty     2010-10-10  2011-04-28  2012-10-28
11.10      Oneiric Ocelot    oneiric   2011-04-28  2011-10-13  2013-05-09
12.04 LTS  Precise Pangolin  precise   2011-10-13  2012-04-26  2017-04-26
12.10      Quantal Quetzal   quantal   2012-04-26  2012-10-18  2014-05-16
13.04      Raring Ringtail   raring    2012-10-18  2013-04-25  2014-01-27
13.10      Saucy Salamander  saucy     2013-04-25  2013-10-17  2014-07-17
14.04 LTS  Trusty Tahr       trusty    2013-10-17  2014-04-17  2019-04-17
14.10      Utopic Unicorn    utopic    2014-04-17  2014-10-23  2015-07-23
15.04      Vivid Vervet      vivid     2014-10-23  2015-04-23  2016-01-23
15.10      Wily Werewolf     wily      2015-04-23  2015-10-22  2016-07-22
16.04 LTS  Xenial Xerus      xenial    2015-10-22  2016-04-21  2021-04-21
16.10      Yakkety Yak       yakkety   2016-04-21  2016-10-13  2017-07-20
17.04      Zesty Zapus       zesty     2016-10-13  2017-04-13  2018-01-25
17.10      Artful Aardvark   artful    2017-04-13  2017-10-19  2018-07-19
Si habéis leído el post anterior, habréis visto que tiene una lista de juegos ordenada en columnas. Pues bien, como podéis imaginar, también podemos utilizar el comando column para transformar un fichero que tiene un dato por cada línea (en este caso el nombre de un juego) en un fichero que tiene datos en columnas. Veamos un ejemplo:
$ head -20 listajuegos
CONTRA 1 
CONTRA FORC 
CONTRA 7 
KAGE
SOPER MARIO 
MARIO 3 
MARIO 6 
DR MARIO 
MARIO BROS 
TURTLES 1 
TURTLES 4 
DOUBLE DRAGON 
DOUBLE DRAGON 2 
MEGA MAN 3 
BLOOD WRESTLE 
BLOOD SOCCER2 
ADVEN ISLAND 
ADVEN ISLAND 2 
CHIP DALE 1 
CHIP DALE 3 
Si queremos mostrar los 20 primeros juegos de una lista en columnas, haremos lo siguiente:
$ head -20 listajuegos | sort -u | column 
ADVEN ISLAND CONTRA 7 MARIO 6
ADVEN ISLAND 2 CONTRA FORC MARIO BROS
BLOOD SOCCER2 DOUBLE DRAGON MEGA MAN 3
BLOOD WRESTLE DOUBLE DRAGON 2 SOPER MARIO
CHIP DALE 1 DR MARIO TURTLES 1
CHIP DALE 3 KAGE TURTLES 4
CONTRA 1 MARIO 3
Si os dáis cuenta, para crear el listado en columnas, primero se rellenan las columnas y luego las filas.

Si queréis que primero se rellenen las filas y luego las columnas, no tenéis más que usar el parámetro -x en el comando column:
$ head -20 listajuegos | sort -u | column -x
ADVEN ISLAND ADVEN ISLAND 2 BLOOD SOCCER2
BLOOD WRESTLE CHIP DALE 1 CHIP DALE 3
CONTRA 1 CONTRA 7 CONTRA FORC
DOUBLE DRAGON DOUBLE DRAGON 2 DR MARIO
KAGE MARIO 3 MARIO 6
MARIO BROS MEGA MAN 3 SOPER MARIO
TURTLES 1 TURTLES 4

Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: