Saltar la navegación

column

El comando column formatea en columnas la información contenida en los ficheros que se le dé como argumentos y en su defecto utilizará la entrada estándar.

En ausencia de opciones, column calcula el número de columnas que utilizará en función de la anchura de la pantalla, de la longitud de la línea más larga de todos los ficheros y que sólo la última columna podrá quedar incompleta. Una vez que sabe cuantas columnas utilizará, distribuye secuencialmente cada línea de los ficheros en una columna, empezando por la primera línea del primer fichero de los argumentos y saltándose las líneas en blanco. Rellena la primera columna, pasa a la siguiente y así hasta terminar de visualizar todas las líneas de los ficheros.

$ cat f1.txt 
línea uno
línea dos
línea tres


línea cuatro
línea cinco
línea seis
línea siete
línea ocho
línea nueve
$ cat f2.txt
línea nueve
línea diez
línea once
línea doce
línea trece
línea catorce

línea quince
línea dieciseis
$ column f1.txt f2.txt
línea uno     línea cuatro    línea siete    línea nueve    línea doce     línea quince
línea dos     línea cinco     línea ocho     línea diez     línea trece     línea dieciseis
línea tres    línea seis     línea nueve    línea once     línea catorce

Opciones de este comando son las siguientes:

  • -c : Especificamos el número de columnas que tiene que tener en cuenta column para hacer el cálculo de columnas. Por defecto utiliza la variable del sistema COLUMNS.
$ column -c 50 f1.txt f2.txt 
línea uno    línea siete    línea doce
línea dos     línea ocho     línea trece
línea tres     línea nueve    línea catorce
línea cuatro    línea nueve    línea quince
línea cinco     línea diez     línea dieciseis
línea seis    línea once
  • -e : Obliga a que las líneas en blanco se tengan en cuenta en la distribución.
$ column -ec 50 f1.txt f2.txt 
línea uno      línea seis    línea doce
línea dos     línea siete    línea trece
línea tres     línea ocho     línea catorce
         línea nueve    
        línea nueve    línea quince
línea cuatro   línea diez     línea dieciseis
línea cinco    línea once
  • -x : Hace que la distribución se haga rellenando por filas y no por columnas, por lo que si queda algún hueco está esta vez en la última fila.
$ column -xc 50 f1.txt f2.txt 
línea uno     línea dos     línea tres
línea cuatro    línea cinco      línea seis
línea siete     línea ocho     línea nueve
línea nueve    línea diez     línea once
línea doce     línea trece     línea catorce
línea quince    línea dieciseis

Por último están las opciones -t, -s y -n, las cuales están relacionadas entre si.

  • -t : Con esta opción column divide las líneas en campos, los cuales están delimitados por una secuencia de espacios y cada campo será una columna, mostrándose cada línea en una fila tabulada. El número de columnas que se mostrarán por pantalla será el de la línea con más campos, por lo que si hay líneas con distinto número de campos, se mostrarán huecos. Esta opción es interesante cuando queremos mostrar información de forma tabulada partiendo de líneas que contienen los mismo campos, por ejemplo, la orden mount muestra líneas con la misma información, pero al tener distintas longitudes, parece desordenada, y con column podemos hacer más legible la salida del comando:
$ mount | column -t
sysfs on  /sys                      type  sysfs        (rw,nosuid,nodev,noexec,relatime)
proc on  /proc                     type  proc         (rw,nosuid,nodev,noexec,relatime)
udev on  /dev                      type  devtmpfs     (rw,relatime,size=10240k,nr_inodes=255065,mode=755)
devpts on  /dev/pts                  type  devpts       (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on  /run                      type  tmpfs        (rw,nosuid,noexec,relatime,size=205268k,mode=755)
/dev/sda1 on  /                         type  ext4         (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
/dev/sdb1 on  /media/usb0               type  vfat         (rw,nosuid,nodev,noexec,relatime)
  • -s : Sirve para especificar el delimitador de campo. Por defecto es una secuencia de espacios, pero si tuviese que ser una secuencia de otro u otros caracteres, se especificaría con esta opción. Si fuesen más de un delimitador, se escribirían todos juntos. Un ejemplo podría ser para visualizar tabuladamente el contenido del fichero /etc/passwd, donde los campos están separados por los dos puntos (:).
$ cat /etc/passwd
usuario:x:1000:1000:usuario,,,:/home/usuario:/bin/bash
kdm:x:114:65534::/home/kdm:/bin/false
telnetd:x:115:122::/nonexistent:/bin/false
ntop:x:116:123::/var/lib/ntop:/bin/false
fpg:x:1001:1001:,,,:/home/fpg:/bin/bash
fetchmail:x:117:65534::/var/lib/fetchmail:/bin/false
$ column -s : -t /etc/passwd
usuario            x  1000   1000   usuario,,,                          /home/usuario               /bin/bash
kdm                x  114    65534  /home/kdm                           /bin/false
telnetd            x  115    122    /nonexistent                        /bin/false
ntop               x  116    123    /var/lib/ntop                       /bin/false
fpg                x  1001   1001   ,,,                                 /home/fpg                   /bin/bash
  • -n : Hace que los campos los delimite un único separador y no una secuencia de ellos. Dos separadores juntos constituirán en este caso un campo vacío. En el ejemplo anterior, vemos que no toda la información está en la columna que le corresponde, por el hecho de que algunos campos no tienen información en algunas líneas y esto hace que vayan seguidos varios caracteres de dos puntos, que por defecto delimitarán un sólo campo.
$ column -s : -t -n /etc/passwd 
usuario            x  1000   1000   usuario,,,                          /home/usuario               /bin/bash
kdm                x  114    65534                                      /home/kdm                   /bin/false
telnetd            x  115    122                                        /nonexistent                /bin/false
ntop               x  116    123                                        /var/lib/ntop               /bin/false
fpg                x  1001   1001   ,,,                                 /home/fpg                   /bin/bash