Comandos simples
Existe una serie de comandos simples para realizar operaciones concretas sobre ficheros de texto- Ordena las líneas alfabéticamente: sort
- Escribe partes seleccionadas de un fichero a la salida estándar: cut
- Une texto de varios ficheros: paste
- Formatea párrafos: fmt
- Borra y/o reemplaza caracteres: tr
- Elimina líneas repetidas: uniq
- Combina varios ficheros: join
- Divide un fichero en ficheros más pequeños: split
- Muestra el principio/final de un fichero: head/tail
- Muestra el fichero al revés: tac, rev
- Muestra el número de líneas, palabras y bytes de un fichero: wc
- Añade números de línea: nl
- Convierte TABs en espacios: expand
- Muestra un fichero en diferentes formatos: od
sort
ordena alfabéticamente líneas de texto y las muestra en la salida estándarFormato:
sort [opciones] fichero
Algunas opciones:
- -b ignora blancos al principio de línea
- -f no distingue mayúsculas/minúsculas
- -r orden inverso
- -m mezcla ficheros previamente ordenados
- -n ordena numéricamente
- -k POS1[, POS2] ordena según los campos desde POS1 o POS2, o el final si no está POS2 (el primer campo es 1)
Ejemplos:
$ cat nombres.txt
María Pérez
luis Andión
Adriana Gómez
jorge pena
$ sort nombres.txt
Adriana Gómez
María Pérez
jorge pena
luis Andión
$ sort -f nombres.txt
Adriana Gómez
jorge pena
luis Andión
María Pérez
$ sort -f +1 +0 nombres.txt
luis Andión
Adriana Gómez
jorge pena
María Pérez
$ sort -f -k 2,2 nombres.txt
luis Andión
Adriana Gómez
jorge pena
María Pérez
cut
Escribe partes seleccionadas de un fichero a la salida estándar; puede usarse para seleccionar columnas o campos de un fichero específicoFormato:
cut [opciones] fichero
Algunas opciones:
- -b, -c, -f corta por bytes, caracteres o campos, respectivamente
- -d fija el carácter delimitador entre campos (por defecto, TAB)
Ejemplos:
$ cat nombres-ord.txt
Luis Andión
Adriana Gómez
Jorge Pena
María Pérez
$ cut -c 1-7 nombres-ord.txt
Luis An
Adriana
Jorge P
María P
$ cut -c 1-5,9-10 nombres-ord.txt
Luis ió
AdriaGó
Jorgena
Maríare
$ cut -d ´ ´ -f 1 nombres-ord.txt
Luis
Adriana
Jorge
María
paste
Permite unir texto de varios ficheros, uniendo las líneas de cada uno de los ficherosFormato:
paste [opciones] fichero1 [fichero2] ...
Algunas opciones:
- -s pega los ficheros secuencialmente, en vez de intercalarlos
- -d especifica los carácteres delimitadores en la salida (por defecto, TAB)
Ejemplos:
$ cat nombres.txt
Luis
Adriana
Jorge
María
$ cat apellidos.txt
Andión
Gómez
Pena
Pérez
$ paste nombres.txt apellidos.txt
Luis Andión Adriana Gómez Jorge Pena María Pérez
$ paste -d ´ ´ nombres.txt apellidos.txt
Luis Andión
Adriana Gómez
Jorge Pena
María Pérez
$ paste -s -d ´\t\n´ nombres.txt
Luis Adriana Jorge María
fmt
Formatea cada párrafo, uniendo o separando líneas para que todas tengan el mismo tamañoAlgunas opciones:
- -n o -w n pone la anchura de las líneas a n (por defecto, 75)
- -c conserva la indentación a principio de línea y alinea a la izquierda la segunda línea
- -s las líneas pueden dividirse, no unirse
- -u uniformiza el espaciado entre palabras
Ejemplo:
$ cat quijote.txt
En un lugar de la Mancha, de cuyo nombre no
quiero acordarme, no ha mucho tiempo
que vivía un
hidalgo de los de lanza en astillero, adarga
antigua, rocín flaco y galgo corredor.
$ fmt -w 45 -u quijote.txt
En un lugar de la Mancha, de cuyo nombre
no quiero acordarme, no ha mucho tiempo
que vivía un hidalgo de los de lanza en
astillero, adarga antigua, rocín flaco y
galgo corredor.
tr
Borra caracteres o reemplaza unos por otrosFormato:
tr [opciones] set1 set2
Algunas opciones:
- -d borra los caracteres especificados en set1
- -s reemplaza caracteres repetidos por un único carácter
Ejemplos:
$ tr ´a-z´ ´A-Z´ < quijote.txt
EN UN LUGAR DE LA MANCHA, DE CUYO NOMBRE...
$ tr -d ´ ´ < quijote.txt
EnunlugardelaMancha,decuyonombre...
$ tr au pk < quijote.txt
En kn lkgpr de lp Mpnchp, de ckyo nombre...
$ tr lcu o < quijote.txt | tr -s o
En on ogar de oa Manoha, de oyo nombre
uniq
Descarta todas (menos una) las líneas idénticas sucesivas en el ficheroFormato:
uniq [opciones] fichero
Algunas opciones:
- -d muestra las líneas duplicadas (sin borrar)
- -u muestra sólo las líneas sin duplicación
- -i ignora mayúsculas/minúsculas al comparar
- -c muestra el número de ocurrencias de cada línea
- -s n no compara los n primeros caracteres
- -f n no compara los n primeros campos
- -t c usa el carácter c como separador de campos (por defecto, espacio o tabulado)
Ejemplo:
$ cat nombres.txt
Julio Lorenzo
Pedro Andión
Celia Fernández
Celia Fernández
Juan Fernández
Enrique Pena
$ uniq nombres.txt
Julio Lorenzo
Pedro Andión
Celia Fernández
Juan Fernández
Enrique Pena
$ uniq -f 1 -c nombres.txt
1 Julio Lorenzo
1 Pedro Andión
3 Celia Fernández
1 Enrique Pena
join
Permite combinar dos ficheros usando campos: busca en los ficheros por entradas comunes en el campo y une las líneas; los ficheros deben estar ordenados por el campo de uniónFormato:
join [opciones] fichero1 fichero2
Algunas opciones:
- -i ignora mayúsculas/minúsculas
- -1 FIELD une en el campo FIELD (entero positivo) de fichero1
- -2 FIELD une en el campo FIELD de fichero2
- -j FIELD equivalente a -1 FIELD -2 FIELD
- -t CHAR usa el carácter CHAR como separador de campos
- -o FMT formatea la salida (M.N fichero M campo N, 0 campo de unión)
- -v N en vez de la salida normal, muestra las líneas que no se unen del fichero N
- -a N además la salida normal, muestra las líneas que no se unen del fichero N
Ejemplo:
$ cat nombres1.txt
Luis Andión
Adriana Gómez
Jorge Pena
María Pérez
$ cat nombres2.txt
Pedro Andión
Celia Fernández
Julio Lorenzo
Enrique Pena
$ join -j 2 nombres1.txt nombres2.txt
Andión Luis Pedro
Pena Jorge Enrique
$ join -j 2 -o 1.1 2.1 0 nombres1.txt nombres2.txt
Luis Pedro Andión
Jorge Enrique Pena
split
Divide un fichero en ficheros más pequeños; los ficheros más pequeños se nombran a partir del prefijo especificado (prefijoaa, prefijoab,...)Formato:
split [opciones] fichero prefijoSi no se pone fichero, o se pone - se lee la entrada estándar
Algunas opciones:
- -l n pone n lineas en cada fichero de salida (por defecto 1000)
- -b n pone n bytes en cada fichero de salida
- -C n pone en cada fichero de salida tantas líneas completas como sea posible sin sobrepasar n bytes
- -d usa números en vez de letras para el nombre de los ficheros de salida
Ejemplo:
$ split -l 2 quijote.txt quij
$ ls quij*
quijaa quijab quijac quijote.txt
$ cat quijaa
En un lugar de la Mancha, de cuyo nombre
no quiero acordarme, no ha mucho tiempo
$ cat quijac
galgo corredor.
$ split -l 2 -d quijote.txt quij
$ ls quij*
quij00 quij01 quij02 ...
head
Muestra el principio de un ficheroFormato:
head [opciones] fichero
Algunas opciones:
- -n N ó -N muestra las primeras N líneas
- -c N muestra los primeros n bytes
- -v le añade una línea de cabecera, con el nombre del fichero
Ejemplo:
$ head -n 2 -v quijote.txt
==>quijote.txt <==
En un lugar de la Mancha, de cuyo nombre
no quiero acordarme, no ha mucho tiempo
tail
Muestra el final de un ficheroAlgunas opciones:
- -n N ó -N muestra las últimas N líneas (por defecto, 10)
- +N muestra de la línea N al final
- -c N muestra los últimos N bytes
- -f hace que tail corra en un lazo, añadiendo líneas a medida que el fichero crece (útil para cuando queremos ver como se modifica un fichero)
- --retry útil con -f; aunque el fichero no exista o sea inaccesible continua intentando hasta que puede abrirlo
- -v le añade una línea de cabecera, con el nombre del fichero
Ejemplo:
$ tail -n 2 -v quijote.txt
==>quijote.txt <==
astillero, adarga antigua, rocín flaco y
galgo corredor.
tac, rev
tac imprime el fichero de la última a la primera línea (opuesto a cat); rev invierte las lineas del ficheroEjemplos:
$ tac quijote.txt
galgo corredor.
astillero, adarga antigua, rocín flaco y
que vivía un hidalgo de los de lanza en
no quiero acordarme, no ha mucho tiempo
En un lugar de la Mancha, de cuyo nombre
$ rev quijote.txt
erbmon oyuc ed ,ahcnaM al ed ragul nu nE
opmeit ohcum ah on ,emradroca oreiuq on
ne aznal ed sol ed ogladih nu aíviv euq
y ocalf nícor ,augitna agrada ,orellitsa
.roderroc oglag
wc
Muestra el número de líneas, palabras y bytes de un ficheroFormato:
wc [opciones] fichero
Algunas opciones:
- -l muestra sólo el número de lineas
- -w muestra sólo el número de palabras
- -c muestra sólo el número de bytes
- -L muestra la longitud de la línea más larga
Ejemplo:
$ wc quijote.txt
5 33 178 quijote.txt
$ wc -l quijote.txt
5 quijote.txt
$ wc -w quijote.txt
33 quijote.txt
$ wc -c quijote.txt
178 quijote.txt
nl
Añade números de línea; nl considera los ficheros separados en páginas lógicas, cada una de ellas con una cabecera, cuerpo y pie, cada una de estas secciones se numera de forma independiente, y la numeración se reinicia para cada página; los comienzos de cabecera, cuerpo y pie de cada página se marcan, respectivamente, con \:\:\:, \:\: y \:Formato:
nl [opciones] fichero
Algunas opciones:
- -b, -h o -f ESTILO indica el estilo de numeración para cuerpo, cabecera o pie, que puede ser:
- a: numera todas las líneas
- t: numerar sólo las líneas no vacías (por defecto para el cuerpo)
- p REGEXP: numera sólo las líneas que concuerdan con REGEXP
- n: no numera ninguna línea (por defecto para cabecera y pie)
- -v n inicia la numeración en n (por defecto, 1)
- -i n incrementa los números por n (por defecto, 1)
- -p no reinicia la numeración al principio de cada página
- -s STRING una STRING para separar los números de línea del texto (por defecto ´ ´)
Ejemplo:
$ nl -s ´q ´ quijote.txt
1q En un lugar de la Mancha, de cuyo nombre
2q no quiero acordarme, no ha mucho tiempo
3q que vivía un hidalgo de los de lanza en
4q astillero, adarga antigua, rocín flaco y
5q galgo corredor.
expand
Convierte TABs en espacios; útil debido a que la representación del TAB puede ser diferente en distintos sistemasFormato:
expand [opciones] fichero ...
Algunas opciones:
- -t n reemplaza cada TAB por n espacios (por defecto, 8)
- -i solo reemplaza los TABs de principio de línea
Ejemplos:
$ cat hola.cEl comando unexpand hace la operación contraria
main() {
for(i=0; i<10;i++)
printf("Hola mundo!\n");
}
$ expand -t 2 hola.c
main() {
for(i=0; i<10;i++)
printf("Hola mundo!\n");
}
od
Muestra un fichero en octal, hexadecimal o otros formatos; en cada línea muestra (en la primera columna) el offsetFormato:
od [opciones] fichero
Algunas opciones:
- -t TIPO especifica el formato de la salida (por defecto octal): o para octal, x para hexadecimal, d para decimal, c para caracteres ASCII, a para caracteres con nombre...
- -A TIPO especifica el formato del offset (por defecto octal): o, x, d como antes, n para que no aparezca
- -w BYTES número de bytes por linea (por defecto 16)
Ejemplo:
$ od -t x -A x quijote.txt
000000 75206e45 756c206e 20726167 6c206564
000010 614d2061 6168636e 6564202c 79756320
000020 6f6e206f 6572626d 206f6e0a 65697571
...