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