Presentaci - PowerPoint PPT Presentation

About This Presentation
Title:

Presentaci

Description:

Programas de UNIX que leen una entrada, realizan una transformaci n y escriben una salida. ... ORS Cadena separadora de registro de salida (Nueva l nea por default) ... – PowerPoint PPT presentation

Number of Views:204
Avg rating:3.0/5.0
Slides: 34
Provided by: Robe357
Category:
Tags: ors | presentaci

less

Transcript and Presenter's Notes

Title: Presentaci


1
4 Filtros

Programación II
Ing. Diego J. Arcusin info_at_digikol.com.ar
2
Introducción a los Filtros
  • Programas de UNIX que leen una entrada, realizan
    una transformación y escriben una salida.
  • Ejemplos
  • grep y tail Seleccionan parte de una entrada
  • sort Clasifica la entrada
  • wc Cuenta la entrada.
  • etc.
  • Filtros de Datos o Filtros Programables
  • sed Editor de Flujo
  • awk Filtro programable con sintaxis similar al C

3
Grep
  • grep patrón archivos....
  • El comando grep examina los archivos nombrados (o
    la entrada estándar) e imprime cada línea que
    contenga un caso de patrón.
  • Ejemplos
  • grep n variable .ch Localiza variable en
    archivos fuentes de C
  • grep y mary HOME/lib/agenda Encontrar el número
    de teléfono de Mary
  • who grep mary Comprobar si mary inicio sesión
  • ls grep v .c Archivos que no sean fuentes de
    C
  • -n Imprime lo números de línea
  • - v Invierte el sentido de la prueba
  • -y Hace indistinto el patrón en mayúsculas o
    minúsculas

4
Expresiones Regulares
  • Grep (y todos los filtros) manejan patrones mucho
    más intricados denominados Expresiones Regulares.
  • Las expresiones regulares se especifican dando un
    significado especial a ciertos caracteres.
  • Algunos metacaracteres
  • Ancla el patrón al inicio de la línea
  • Ancla el patrón al final de la línea.
  • a-z Rango (cualquier minúscula)Ojo!!
    0-9 Complemento del Rango (cualquier caracter
    menos un dígito)
  • . Se acopla con cualquier caracter (Similar
    al ? para el Shell)
  • Algunos ejemplos
  • ls l grep d Lista los nombres de
    directorios
  • ls l grep .......rw Lista los archivos
    que otros pueden leer y escribir.

5
Expresiones Regulares (cont.)
  • Operador cerradura Se aplica al caracter o
    metacaracter anterior (incluyendo un rango), y en
    conjunto concuerdan con cualquier número de
    acomplamientos sucesivos del caracter o
    metacaracter.
  • Ejemplos
  • x Concuerda con una secuencia de x lo más larga
    posible.
  • a-zA-Z Concuerda con una cadena alfabética de
    cualquier longitud
  • . Concuerda con cualquier cosa hasta una nueva
    línea
  • .x Concuerda con cualquier cosa hasta la última
    x del renglón
  • Advertencias
  • Se aplica exclusivamente a un caracter. fg
    reconoce a una f seguida de varias g, y no una
    secuencia como fgfgfgfg.
  • Reconoce cero, una o varias concordancias del
    caracter. Si queremos que reconozca por lo menos
    un caracter tendremos que duplicarlo. Por ejemplo
    para reconocer una cadena de letras la expresión
    correcta será a-zA-Za-zA-Z
  • Ninguna expresión regular de grep reconoce el
    caracter nueva línea.

6
La Familia Grep
  • grep es en realidad el más antiguo de su familia.
  • fgrep
  • Permite buscas muchas cadenas literales
    simultáneamente
  • egrep
  • Busca expresiones regulares verdaderas (Igual que
    grep pero adiciona el operador o y paréntesis
    para agrupar expresiones.
  • Los paréntesis se utilizan para agrupar de manera
    que(xy) concuerda con la cadena vacía, xy,
    xyxy,xyxyxy, y así sucesivamente.
  • La barra vertical es un operador o.
  • Egrep agrega otros dos operadores de cerradura
    y ?.
  • x reconoce una o más x
  • x? reconoce cero o una x (no varias)

7
Ejemplos Complejos
  • aeiouaaeioueaeiouiaeiouoaeiou
    uaeiouEncuentra palabras que contengan las
    5 vocales en orden alfabético.
  • egrep a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?
    v?w?x?y?z? archivo grep . . . . . .
    Encuentra palabras de 6 letras que tengan todas
    sus letras (distintas) en orden alfabético.

8
Por qué 3 programas?
  • fgrep no interpreta ningún metacaracter, pero
    permite la búsqueda eficiente de miles de
    palabras en paralelo. El tamaño de los patrones
    típicos de fgrep rebasa la capacidad de los
    algoritmos usados en grep y egrep.
  • La distinción entre grep y egrep es más difícil
    de justificar. Simplemente grep es más antiguo
    (aunque más difundido).

9
Sort
  • Por default, clasifica su entrada por renglones
    en orden ASCII. Algunas de sus opciones
  • -f Vuelve equivalentes mayúsculas y minúsculas.
  • -d Orden de diccionario. Ignora todos los
    caracteres excepto letras, dígitos y blancos.
  • -n Comparación numérica
  • -r Revierte el sentido de la comparación
  • -o Especifica un nombre de archivo para la salida
  • -u Suprime las líneas repetidas
  • Ejemplos
  • ls sort f Clasifica los archivos por orden
    alfabético
  • ls s sort n Clasifica los archivos más
    pequeños primero
  • ls s sort nr Clasifica los archivos más
    grandes primero

10
Sort (Campos)
  • Se le puede indicar a sort que dirija solo su
    atención a campos específicos. La notación m
    significa que la comparación omite los primeros m
    campos 0 es el inicio de la línea. Así por
    ejemplo
  • ls l sort 3nr Clasifica por conteo de bytes
    (primero el más grande)
  • who sort 4n Clasifica por tiempo desde inicio
    de sesión (primero el más antiguo)

11
Más filtros
  • El comando tr translitera los caracteres de su
    entrada.Uno de los usos más comunes es la
    conversión de mayúsculas y minúsculas.
  • tr a-z A-Z Convierte minúsculas en mayúsculas
  • tr A-Z a-z Convierte mayúsculas en minúsculas
  • Uniq
  • Elimina renglones duplicados
  • dd
  • Bastante distinto a lo visto hasta ahora. Suele
    emplearse para manejar datos en bruto y sin
    formato. Posee recursos para transformar de ASCII
    a EBCDIC y para manejar datos binarios.

12
Sed
  • Lee un renglón a la vez a partir de los archivos
    de entrada, aplica los comandos de la lista, por
    orden a cada renglón y escribe su forma editada
    en la salida estándar.
  • Sintaxis sed lista de comandos archivo ...
  • Por ejemplo
  • sed s/UNIX/UNIX (TM)/g archivos ... gt output
  • Advertencia sed no altera los contenidos de sus
    archivos de entrada. Escribe sobre la salida
    estándar por lo que archivos originales
    permanecen intactos.
  • Otro ejemplo
  • who sed s/ . / /Trae solo los nombres de
    usuarios y la hora de inicio de sesión.
  • sed s//-gt/ o sed /./s//-gt/ Pone
    un tabulador al inicio de cada línea. La segunda
    versión solo lo hace en aquellos renglones que no
    sean sólo un caracter nueva línea.

13
Sed (Cont.)
  • Por defecto realiza la impresión automática de la
    salida. La opción n desactiva la salida la cuál
    debe ser explicitada mediante el comando p. Por
    ejemplo
  • sed n /patrón/p hace lo mismo que grep
  • sed n /patrón/!p hace lo mismo que grep v
  • Otros ejemplos
  • sed s//\ Agrega un caracter nueva línea al
    final de cada renglongt / haciendo que la
    salida tenga doble espacio.
  • sed s/ -gt -gt/\ Reemplaza cada cadena de
    blancos o tabs por un nueva líneagt / por lo
    que divide cada palabra de la entrada en un
    renglón.
  • sed n 20,30p Imprime sólo las líneas 20 a
    30.
  • sed 1,10d Borras las líneas 1 a 10 ( a tail
    11)
  • sed 1,//d Borra hasta la primera línea en
    blanco inclusive
  • sed d Borra la última línea

14
awk
  • Awk es parecido al sed pero con una sintaxis más
    similar al lenguaje C.Sintaxis awk programa
    archivos...La sintaxis del programa es patrón
    acción
  • patrón acción
  • Awk lee la entrada en los nombres de archivo un
    renglón a la vez. Cada renglón se compara con
    cada patrón en orden, para cada patrón que
    concuerde con el renglón se efectúa la acción
    correspondiente.
  • Al igual que sed, awk no altera los archivos de
    entrada.
  • Los patrones pueden ser expresiones regulares
    exactamente como en egrep, aunque también pueden
    ser condiciones más complejas que recuerdan más
    al lenguaje C.

15
awk (cont.)
  • Ejemplos
  • awk /expresion regular/ print archivos Hace
    lo que egrep
  • El patrón y la acción son opcionales.
  • Si se omite la acción, la acción por default es
    imprimir la línea.
  • Si se omite el patrón, la parte de acción se hace
    para todas la líneas de la entrada.
  • Al igual que en sed los comandos de awk pueden
    estar en un archivos separado mediante la
    siguiente sintaxis
  • awk f cmdfile archivo ...

16
awk - Campos
  • Awk divide cada renglón de entrada
    automáticamente en campos (cadenas de caracteres
    que no sean blancos, separados por blancos o
    tabuladores.)
  • Por ejemplo la salida de who tiene 5 campos
  • who
  • carlos tty2 Sep 14 1153
  • maria tty3 Sep 14 1127
  • Awk llama a los campos 1, 2,..., NF. NF es una
    variable cuyo valor es igual al número de campos.
    En este caso NF 5 en ambos renglones. Notese la
    diferencia entre NF número de campos- y NF el
    último campo del renglón-.En awk, a diferencia
    del Shell, sólo los campos empiezan con , las
    variables no tienen adornos.
  • Por ejemplo
  • du a awk print 2 Excluye los tamaños
    deja sólo los nombres de archivos.

17
awk Campos (cont.)
  • Awk normalmente supone que el espacio en blanco
    (cualquier número de blancos y tabuladores)
    separa los campos, pero el separador puede
    cambiarse a cualquier caracter. Una manera de
    hacerlo es recurrir a la opción F (mayúscula) de
    la línea de comandos. Por ejemplo
  • awk F print 1 /etc/passwd Imprime sólo
    los nombres de usuarios del /etc/passwd

18
awk Impresión
  • La variable NR es el número del registro o
    línea actual. awk print NR 0 Imprime
    el número de línea seguido de la línea completa.
    El campo 0 es la línea entera, sin cambios.
  • En una acción print, los elementos separados por
    comas se imprimen separados por el separador de
    salida (Por default el blanco.)
  • La proposición printf permite un control completo
    sobre la salida. (similar al C) awk printf
    4d s\n, NR, 04d especifica un entero
    decimal (NR) en un campo de 4 dígitos de ancho,
    s especifica una cadena de caracteres (0) y\n
    un caracter nueva línea. (Printf no imprime ni
    blancos, ni nuevas líneas por default).

19
awk Patrones
  • awk F 2 /etc/passwdBusca los
    usuarios sin contraseña.
  • Otras formas de obtener el mismo resultado
  • 2 // El segundo campo concuerda con la
    cadena vacía.
  • 2 ! /./ El segundo campo no concuerda con
    cualquier caracter.
  • length(2) 0 La longitud del segundo campo es
    cero.
  • El símbolo indica concordancia con una
    expresión regular y ! significa no
    corresponde. La expresión regular debe estar
    encerrada entre diagonales.
  • Awk se vale de la misma convención que el Shell
    para los comentarios. El símbolo indica el
    inicio de un comentario.
  • La función substr(s,m,n) produce la subcadena se
    s que comienza en la posición m y mide n
    caracteres de largo.
  • El Awk proporciona dos Patrones especiales BEGIN
    y END. Las acciones de BEGIN se realizan antes
    del primer renglón, y las acciones de END se
    efectúan luego de ser procesado el último renglón.

20
awk Ejemplos
  • awk NF 2 ! 0 print Despliega si hay un
    número par de campos
  • awk length(0) gt 72 print Renglón, NR,
    muy largo, substr (0,1,50)
  • dateThu Aug 29 121701 EDT 2005 date awk
    print substr(4, 1, 5)1217
  • awk BEGIN FS Nuevamente Busca
    usuarios sin contraseñagt 2 /etc/passwd
  • awk END print NR ... Idem wc l

21
awk Operaciones Aritméticas
  • awk también puede realizar cálculos sobre los
    datos de entrada. Es muy sencillo contar cosas,
    hacer sumas, sacar promedios y otras operaciones
    afines. Por ejemplo, para sumar todos los números
    de la primera columna s s 1 END
    print s Si modificamos la última línea del
    programa por END print s, s/NR Imprime la
    suma y el promedio.
  • La variables se inicializan a cero por default.
  • Awk ofrece además los mismos operadores
    aritméticos abreviados que el lenguaje C. Por
    ejemplo s 1 es lo mismo que s s 1
  • Ejemplo Versión de wc hecha en awk. nc
    length (0) 1 número de caracteres nw
    NF END print NR, nw, nc

22
awk Variables
  • Las variables también pueden guardar cadenas de
    caracteres.
  • Las variables de cadena se inicializan con la
    cadena vacía.
  • Variables predefinidas en awk
  • FILENAME Nombre del archivo de entrada actual
  • FS Caracter separador de campo (blanco y tab por
    default)
  • NF Número de campos del registro de entrada
  • NR Número del registro de entrada
  • OFMT Formato de salida para números (g por
    default)
  • OFS Cadena separadora de campo de salida (blanco
    por default)
  • ORS Cadena separadora de registro de salida
    (Nueva línea por default)
  • RS Caracter separador de registro de entrada
    (Nueva línea por default)

23
awk Operadores
  • Operadores de awk (por orden creciente de
    precedencia)
  • - / Asignación
  • O lógico
  • Y lógico
  • ! Niega el valor de la expresión
  • gt gt lt lt ! ! Operadores
    relacionales y ! equivalen a
    correspondencia y no correspondencia
  • nada Concatenación de cadenas
  • - más, menos
  • / multiplicar, dividir, resto
  • - - Incrementar, decrementar (prefijo o
    postfijo)

24
awk Control de Flujo
  • IF (Exactamente igual a la instrucción del
    lenguaje C). Sintaxis if (condición) proposici
    ón 1 else proposición 2
  • FOR (Exactamente igual a la del lenguaje C).
    Sintaxis for (expresión 1 condición
    expresión 2) proposición
  • WHILE (equivalente al for anterior) expresión
    1 while (condición ) proposición expresión
    2
  • La proposición next hace que se lea la siguiente
    línea de entrada y que se comparen los patrones
    para reanudar la ejecución al inicio del
    programa. La proposición exit origina una
    transferencia inmediata al patrón END.

25
Otro ejemplo
  • El siguiente programa detecta palabras
    duplicadas sucesivas.
  • awk FILENAME ! prevfile Nuevo
    archivo NR 1 Restablecer número de
    renglón prevfile FILENAMENF gt 0 if (1
    ultimapalabra) printf duplicación s,
    archivo s, línea d\n, 1, FILENAME, NR
  • for ( i2 i lt NF i )
  • if ( i (i-1) )
  • printf duplicación s, archivo s,
    línea d\n, i, FILENAME, NR
  • ultimapalabra NF

26
Otro ejemplo
  • El siguiente programa invierte el contenido de
    todos los renglones
  • awk for ( i NF i gt 2 i - - )
  • printf s , i
  • printf \n

27
Arreglos
  • Awk también proporciona arreglos. Ejemplo
    trivial Invierte los renglones. cat
    backwards backwards despliega la entrada en
    dirección contraria awk lineaNR 0
    END for ( i NR i gt 0 i - -) print linea
    i
  • Los arreglos no necesitan ser declarados.
  • El tamaño del arreglo está limitado únicamente
    por la memoria disponible.
  • Awk soporta arreglos asociativos. Por lo general
    concebimos subíndices de arreglos como enteros,
    pero en awk cualquier valor puede servir de
    subíndice.
  • Por ejemplo, para sumarizar por nombre 2 columnas
    del tipo Carlos 1000 Martin 2000 Carlos
    500 ... ... Sandra 800 sum
    1 2 END for (name in sum) print
    name, sum name )

28
Otro ejemplo
  • cat frecuencia frecuencia muestra todas las
    palabras utilizadas y su frecuenciaawk for (
    i 1 i lt NF i ) numi END for (
    palabra in num) print palabra, numpalabra
    sort 1 -nr

29
Funciones predefinidas de awk
  • cos (expr) Coseno de expr
  • exp (expr) Exponencia de expr e elevado a exp
  • getline( ) lee la siguiente linea de entrada
    devuelve 0 si es fin de archivo, 1 de lo
    contrario
  • index (s1,s2) Posición de la cadena s2 en s1
    devuelve 1 si no está.
  • int (expr) Parte entera de expr, truncar hacia 0.
  • length (s longitud de la cadena s
  • log (expr) Logaritmo natural de expr
  • sin (expr) Seno de expr
  • split (s,a,c) Divide s en a1 ... an en el
    carácter c devuelve n
  • sprintf (fmt, ...) Da formato a ... según la
    especificación de fmt
  • substr (s,m,n) Subcadena de n caracteres de s,
    comenzando en la posición n

30
Interacción con el Shell
  • Supongamos que el usuario quiere escribir un
    programa campo n que imprime el campo n-esimo de
    cada renglón de la entrada.Por ejemplo who
    campo 1 Debería desplegar sólo el nombre de los
    usuarios que iniciaron sesión. Para poder
    resolver esto pasando un parámetro del shell al
    awk
  • awk print 1
  • Otra forma de hacerlo (aunque es preferible la
    anterior)
  • awk printf \1

31
Preguntas
  • ?

32
Ejercicios
  • 4.1. Crear un archivo diccionario.txt, con todas
    las palabras (una por línea) tomadas de archivos
    de datos (en castellano) de su Home Directory. El
    archivo diccionario.txt debe quedar ordenado, no
    contener duplicados y todas las letras deberán
    estar en minúsculas.
  • a) Extraer todas las palabras que empiecen y
    terminen con vocal.
  • b) Mostrar el archivo eliminando todas las
    vocales, estén acentuadas o no.
  • c) Un diptongo está  formado por dos vocales,
    una fuerte y una débil, o dos débiles. Las
    vocales fuertes son a, e, o las vocales débiles
    son i, u. La acentuación de u o i destruye el
    diptongo.
  • i) mostrar todas las palabras con diptongo
    formado por dos vocales débiles,
  • ii) mostrar todos los diptongos con a iii)
    buscar una expresión regular mínima que
    despliegue todos los diptongos.
  • d) Mostrar todas las palabras de 3 letras o más
    que sean palíndromos.

33
Ejercicios
  • 4.2. El archivo acceso.log registra el acceso de
    los usuarios a un sistema UNIX. Este archivo
    cuenta con un renglón por cada uno de los accesos
    y posee la siguiente estructura de campos
    separados por
  • - Usuario
  • - Fecha de Ingreso (Formato ddmmyyyy)
  • - Hora de Ingreso (Formato hhmmss 24 horas-)
  • - Dirección IP
  • Desarrollar comandos que
  • a) Muestren el nombre de cada usuario y la
    cantidad total de accesos registrados, en orden
    alfabético.
  • b) Extraer del archivo las líneas
    correspondientes a un usuario particular que se
    recibirá como parámetro.
  • c) Agregar dos parámetros opcionales que
    permitan extraer sólo los registros
    correspondientes a cierto mes o cierto año.
  • d) Extraer del archivo acceso.log las líneas que
    correspondan al usuario jperez o al usuario
    elopez.
Write a Comment
User Comments (0)
About PowerShow.com