LPIC

Guía extraoficial de estudio

Archivos en la Categoría: – Transformar ficheros: expand, sort, split, uniq y tr

Comandos para transformar ficheros: expand, sort, split, uniq y tr

Los comandos que vamos a comentar no cambian realmente el contenido de los ficheros, sino que envían el fichero modificado a la salida estándar. Después, podemos canalizar la salida a otro comando o fichero.

expand : convertir tabulaciones en espacios:

Interesante comando para los que programan pequeños scripts o programas desde un editor de texto. Todavía recuerdo la primera vez que lo utilicé. Estuve varios días programando un programa en python, era para una práctica que tenia que presentar. Después de que el profesor modificara las lineas de código que creyera oportunas, el programa devolvía errores de indexación todos lados. Motivo? pues el editor de texto que yo utilicé tenia definidos las tabulaciones como tabulaciones (lógico), y mi profesor tenia la opción marcada de gedit de “insertar espacios en lugar de tabulaciones” y ancho de tabulador 4. Cada vez que pulsaba el tabulador, insertaba cuatro espacios. Fue tan sencillo como hacer:

[super@super Documentos]$ expand -t 4 prog.py > prog_con_espacios.py
El comando unexpand, hace lo opuesto, convierte varios espacios en tabulaciones. También acepta la opción -t num.

sort: ordenar ficheros

Sort (en inglés ordenar), es utilizado para ordenar la salida de un comando. Tenemos el documento abecedario.txt que contiene letras al azar. Para mostrar una salida ordenada:

[super@super Documentos]$ sort abecedario.txt
c
d
d
e
f
g
h
q
r
s
t
x
x
z
Recordemos que sort ordena por el valor ASCII, el cual distingue entre letras mayúsculas y minúsculas.

Algunas de las opciones de este comando son:

Flag Resultado
-f o –ignore-case Ignora entre mayúsculas y minúsculas
-M o –month-sort Ordena por las abreviaturas de tres letras de los meses (de JAN a DEC)
-r o –reverse Invierte el orden
-n o –numeric-sort Ordenación numérica
-k campo o –fey=campo Permite definir el campo de la ordenación

split: dividir ficheros

Este comando nos permite dividir un fichero en dos o más.

Algunas de las opciones de este comando son:

Flag Resultado
-b tamaño o –bytes=tamaño Divide el fichero por bytes. Puede corta un fichero por la mitad de una linea.
-C tamaño o –line-bytes=tamaño Divide un fichero por el numero de bytes especificado sin romper sus lineas.
-l lineas o –lines=lineas Divide un fichero en bloques no superiores al número de lineas especificado.

El siguiente comando nos genera los ficheros aba, abe, abc, etc, con tres lineas cada uno, extraidas del fichero abecedario.txt:

split -l 3 abecedario.txt ab

uniq: eliminación de lineas duplicadas

Nos permite eliminar todas las lineas que sean idénticas.

Supongamos que al ordenar un fichero, queda de la siguiente manera:

[super@super Documentos]$ sort fichero.txt
aa
aa
bb
bb
cc
cc

Para eliminar duplicados ejecutamos:

[super@super Documentos]$ sort fichero.txt | uniq
aa
bb
cc

tr : traducción de carácteres

Su sintaxis puede resultar un poco confusa para algunos:

tr [OPCIÓN] … SET1 [SET2]

Veamos algunos ejemplos para entenderla mejor. Queremos convertir todas las vocales de la siguiente frase a mayúsculas:

[super@super Documentos]$ echo frase de ejemplo | tr aeiou AEIOU
frAsE dE EjEmplO

También podemos utilizar dicho comando para eliminar ciertos caracteres, con -d:

$ echo hola | tr -d o
hla

Ahora eliminiaremos todos los espacios repetidos que tengamos en una frase con la opción -s:

[super@super Documentos]$ echo ‘esto es       una frase    con    espacios  repetidos’ | tr -s ‘ ‘
 esto es una frase con espacios repetidos