Comandos de filtro en Linux
Table of Contents
ToggleIntroducción
A continuación estaremos explicando el uso y función de comandos de filtro en Linux . Los mismos, son usados como herramienta para procesar el texto frente al flujo de datos de la entrada estándar. También, son utilizados con pipes para la concatenación con otros comandos, o bien, porque el resultado es útil para colocarlo en un archivo redireccionando la salida estándar.
Comando cat
Este es uno de los comandos de filtro en linux más utilizados. Su función es pasar el contenido de un archivo a la salida estándar (STDOUT) cuyo resultado será mostrar en pantalla el contenido de un archivo.
Opciones:
-s quita las líneas en blanco repetidas
-A muestra los caracteres no imprimibles ($: nueva línea, ^I: tab)
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
(….)
# cat -A /etc/passwd
root:x:0:0:root:/root:/bin/bash$
daemon:x:1:1:daemon:/usr/sbin:/bin/sh$
bin:x:2:2:bin:/bin:/bin/sh$
(…)
Redireccionar la salida de un archivo a otro:
# cat /etc/passwd > otro.txt
Comando Tac
El comando tac pasa el contenido de un archivo a la salida estándar (STDOUT) de manera invertida (a diferencia de cat), el resultado será mostrar en pantalla el contenido de un archivo comenzando por el final. Veamos la siguiente comparación:
# cat test.txt
uno
dos
tres
# tac test.txt
tres
dos
uno
Comando Cut
El comando cut permite separar en secciones el contenido de un archivo o el contenido recibido por STDIN.
Opciones:
-d Define un delimitador, para separar en campos (el predeterminado es TAB)
-c Cantidad de caracteres
-f Campo o campos a mostrar
Mostrar los primeros 8 caracteres por línea:
# cut -c1-8 /etc/passwd
root:x:0
daemon:x
bin:x:2:
(…)
Muestra los primeros 8 caracteres y luego del 20 al 25:
# cut -c1-8,20-25 /etc/passwd
root:x:0ot:/bi
daemon:x:/usr/
bin:x:2:/bin/s
(…)
Toma como delimitador el signo “ : ” y se muestra la primer columna:
# cut -d»:» -f1 /etc/passwd
root
daemon
bin
(…)
Toma como delimitador el signo “ : ” y se muestra la primer columna:
# cut -d»:» -f1 /etc/passwd
root
daemon
bin
(…)
Toma como delimitador el signo “ : ” mostrando la primer y la sexta columna:
# cut -d»:» -f1,6 /etc/passwd
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
(…)
Comando Head
El comando head nos permite mostrar las primeras líneas de un archivo. De manera predeterminada mostrará las primeras 10 líneas.
Opciones:
-n [numero] Muestra el número de líneas especificado (anteponiendo un signo “ – ”, muestra todo excepto esa cantidad de líneas)
-c [número] Muestra el número de caracteres especificado (número seguido de k muestra en kilobytes)
Muestra los 6 primeros caracteres de la primer fila:
# head -c6 /etc/passwd
root:x
Muestra las primeras “n” filas, en lugar de las primeras 10:
# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
Comando tail
El comando tail nos permite mostrar las últimas líneas de un archivo. De manera predeterminada mostrará las últimas 10 líneas.
Opciones:
-n [numero] Muestra el número de líneas especificado (anteponiendo un signo “ + ”, muestra comenzando en la línea especificada hasta el final)
-c [número] Muestra el número de caracteres especificado (número seguido de k muestra en kilobytes)
-f Captura el archivo y muestra la salida mientras se va modificando
# tail test.txt
Uno
Dos
Tres
Cuatro
Cinco
Seis
Siete
Ocho
Nueve
Diez
# tail –n 1 test.txt
Diez
Comando nl
Dentro de los comandos de filtro en linux, nl nos hace «más facil» la legibilidad de un texto. Su función consiste en enumerar las líneas de un archivo con diferentes formatos. El mismo puede tener definidas secciones para poder enumerarlas. Es decir :
- Con “ \:\:\:” se define la sección encabezado.
- Con “ \:\: ” el cuerpo y con “ \: ” el pie.
Opciones:
-h [opción] Formato encabezado (header)
-f [opción] Formato pie (footer)
-b [opción] Formato cuerpo (body)
Los posibles formatos son:
a Numera todas las líneas
t Numera las que no esten vacias
n No las numera
# nl /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
(…)
# cat archivo.txt
\:\:\:
encabezado
\:\:
cuerpo
line1
line2
line3
\:
pie
\:\:\:
encabezado
\:\:
cuerpo
line1
line2
line3
\:
Pie
Enumera todas las líneas incluyendo el encabezado:
# nl -h a archivo.txt
1 header
2 line1
3 line2
4 line3
footer
1 header
2 line1
3 line2
4 line3
Footer
Enumera los encabezados, pero no las líneas del cuerpo:
# nl -b n -h a archivo.txt
1 header
line1
line2
line3
footer
1 header
line1
line2
line3
footer
Enumera todas las líneas incluyendo el pie:
# nl -f a nl
header
1 line1
2 line2
3 line3
4 footer
header
1 line1
2 line2
3 line3
4 footer
Comando od
El comando od (octal dump) se utiliza para visualizar el contenido de un archivo en varios formatos (Octal, Hexadecimal, Caracteres visibles y no visibles). No es muy utilizado
# od -c /etc/passwd
0000000 r o o t : x : 0 : 0 : r o o t
Comando paste
El comando paste se utiliza para unir dos o más archivos en columnas en una única salida.
Opciones:
-d [delimitador] Separa las columnas con el delimitador definido. El predeterminado es tab
-s El contenido del archivo en una única línea. Si son más de un archivo separará por línea cada uno.
# cat file1
Casa
Et
Telefono
# cat file2
Telefono
Casa
Telefono
Unir ambos archivos:
# paste file1 file2
Casa Telefono
Et Casa
Telefono Telefono
Une ambos archivos separando el contenido por una arroba:
# paste -d’@’ file1 file2
Casa@Telefono
Et@Casa
Telefono@Telefono
Une ambos archivos, pero con una única línea:
# paste -s file1 file2
Casa Et Telefono
Telefono Casa Telefono
Comando Sort
El comando sort permite ordenar el contenido de un archivo en varias formas.
Opciones:
-f Ignora la diferencia entre mayúsculas y minúsculas
-r Ordena de manera inversa
-k [columna] Define columna para ordenar
-M Ordena por mes (sólo inglés)
-n Ordena de manera numérica
-d Toma letras, números y espacios en blanco
# sort /etc/passwd
avahi:x:109:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
clamav:x:111:124::/var/lib/clamav:/bin/false
(…)
# sort -r /etc/passwd
www-data:x:33:33:www-data:/var/www:/bin/sh
vde2-net:x:107:118::/var/run/vde2:/bin/false
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
$ ls -la |sort -n -k 5
-rw-rw-r– 1 keny keny 2408172 Jun 22 22:49 wikimedia 2.pdf
-rw-r–r– 1 user user 2710249 May 26 13:48 ibmsamqt-3.2.3.1-2.i386.rpm
-rw-rw-r– 1 keny keny 3360412 Jun 10 00:38 vlc-0.7.0-1.i386.rpm
(…)
Comando split
El comando split divide un archivo en varios, ya sea por cantidad de líneas o un tamaño determinado.
Sintaxis:
split (opciones) [archivodeentrada] {archivodesalida}
Opciones:
-l [número] Cantidad de líneas para cortar (Se puede omitir la “l” Ej: usar -3, para 3 líneas)
-b [número] Cantidad de bytes para cortar
Creará varios archivos de 10 líneas. El resultado se guardará en passwd-cortado XX donde XX serán letras incrementándose.
# split -l 10 /etc/passwd passwd-cortado
Comando uniq
El comando uniq elimina líneas duplicadas en un archivo.
Opciones:
-c Muestra la cantidad de repeticiones
# cat ejemplo.txt
Pedro
Mario
Lucas
Lucas
Marina
Pedrito
Hola
Hola
# uniq ejemplo.txt
Pedro
Mario
Lucas
Marina
Pedrito
Hola
Muestra la cantidad de repeticiones:
# uniq -c ejemplo.txt
1 Pedro
1 Mario
2 Lucas
1 Marina
2 Hola
1 Pedrito
Muestra sólo lo que se repite:
# uniq -d Lucas
Lucas
Hola
Muestra lo que nunca se repite:
# uniq -u Lucas
Juan
Pedro
Mario
Marina
Pedrito
Comando wc
El comando wc se utiliza para contar líneas, caracteres y palabras.
Opciones:
-w Cantidad de palabras
-l Cantidad de líneas
-c Cantidad de caracteres
Si no se especifican las opciones, este la mostrará cantidad de líneas, palabras y caracteres.
# wc /etc/passwd
43 64 2099 /etc/passwd
Cantidad de líneas:
# wc -l /etc/passwd
43 /etc/passwd
Cantidad de palabras:
# wc -w /etc/passwd
64 /etc/passwd
Cantidad de caracteres:
# wc -c /etc/passwd
2099 /etc/passwd