universidad don bosco facultad de estudios tecnológicos escuela de

Anuncio
UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLÓGICOS
ESCUELA DE COMPUTACIÓN
CICLO: 01/2015
GUIA DE LABORATORIO #6
Nombre de la Practica: Programación con awk
Lugar de Ejecución: Laboratorio de Redes, Edificio 3 del CITT
Tiempo Estimado: 2:30 horas.
MATERIA: Aplicaciones para redes.
DOCENTE: Denis Altuve, Marvin Martínez
I. OBJETIVOS
Que el estudiante:



Comprenda el uso de awk
Pueda extraer registro y campos
Manipule las variables especiales de awk.
II. INTRODUCCION TEORICA
El nombre awk proviene de las iniciales de sus desarrolladores : Alfred V. Aho, Brian W. Kerningan y
Peter J. Weinberger, de los Laboratorios Bell de AT&T. Inicialmente se desarrolló para escribir
programas muy cortos, pero las características de este atrajo a los usuarios de tal modo, que lo
impulsó más allá de la idea original de los autores.
awk es un lenguaje de búsqueda y procesamiento de patrones. Esto quiere decir que awk es capaz
de buscar un patrón dentro de un archivo (al igual que grep) y tratarlo según unas operaciones
determinadas. Con awk se pueden desarrollar auténticos programas.
Según esto awk es capaz de procesar un archivo con datos organizados por columnas y generar
nuevas columnas con los valores resultantes de realizar ciertos cálculos u operaciones.
A diferencia de comandos Unix como grep y sed, que filtran y procesan texto, awk incorpora su
propio lenguaje de programación, siendo capaz de ofrecer operaciones aritméticas, relaciones
lógicas y variables. Se pueden desarrollar programas con awk que procesen la entrada estándar o
un archivo, realizando tareas como tratar archivos de texto como bases de datos. El lenguaje de
programación awk incluye estamentos como for, while e if-else, así como un conjunto de funciones
y variables incorporadas.
Sintaxis
La sintaxis de awk es:
awk [-f archivo_programa] [-F] ['programa'] [variable=valor ...] [archivo]
donde:
archivo_programa: especifica el archivo fuente del programa a aplicar a archivo.
-F: especifica el carácter delimitador de campos. Por defecto se considera el espacio en blanco.
programa : especifica el conjunto de patrones e instrucciones a ejecutar con archivo. La diferencia
con archivo_programa, es que en este caso hay que especificar los patrones e instrucciones en la
línea de comandos. Para evitar interferencias con la shell deben ir encerradas entre comillas
A
1
Guía # 6: Programación con awk
simples(').
variable=valor:se utiliza para establecer los valores que tomarán las variables que
utilice el programa.
archivo: archivo que será procesado por awk. Si se especifica .
Formato de los estamentos
La estructura general de los estamentos o conjuntos patrón-acción es:
Patrón { acción }
Interpretación:
 Para cada línea que verifique lo especificado en el patrón, se ejecutará la acción indicada.
 La acción siempre va encerrada entre llaves.
 Se pueden especificar varias acciones, separándolas por ";" o por el carácter nueva línea.
 En una regla awk, el patrón o la acción puede ser omitida, pero no ambos.
Si no se especifica la acción, se mostrarán por pantalla aquellas líneas que contengan el patrón. La
acción está formada por estamentos (if, for, print, sprintf, next), los cuales deben finalizar en ";",
Nueva Línea o llaves. Dentro de las acciones se pueden realizar operaciones matemáticas, de
concatenación, etc. Las variables utilizadas pueden ser escalares, campos o tablas, y son
inicializadas a la cadena nula.
Si la evaluación del patrón resulta positiva, se realiza la acción asociada. El resultado de una de un
patrón vacío se
considera siempre positivo. Si la acción se omite, se asume que lo que se desea es mostrar el
registro en la salida estándar. Este proceso se reitera con cada línea, hasta llegar al final del
archivo.
Campos de entrada
Para utilizar una expresión que no sea trivial se debe introducir el concepto de “campo”. Se
considerará cada registro del archivo de entrada como una sucesión de campos delimitados por un
carácter dado. Este carácter es, por omisión, el espacio. Como se ha visto anteriormente, se puede
indicar a awk que considere otro carácter como separador de campos mediante la opción –F
(mayúscula) en la línea de mandatos.
Se hace referencia al contenido de cada campo usando el carácter “$” (dólar) seguido del ordinal
del campo: $1, $2, $3,etc. Con la notación $0 se hace referencia a la línea entera.
Variables
También es necesario en este punto citar la existencia de variables predefinidas en el lenguaje. El
concepto tradicional de “variable” (almacén de datos en memoria, caracterizado por un nombre no
repetido en el mismo contexto y capaz de contener un dato que puede ser modificado por el
programa) se aplica perfectamente en este caso.
A
2
Guía # 6: Programación con awk
Las siguientes variables predefinidas están relacionadas con la información entrante:
F
Field separator): contiene el carácter que indica a awk en qué punto del registro acaba un
campo y empieza el
siguiente. Por omisión es un espacio. Se puede indicar un carácter alternativo mediante
una instrucción de asignación
como F,.
NF
(Number of fields): contiene el número total de campos que contiene el registro que se
está leyendo en cada
momento.
NR
(Number of record): contiene el número de orden del registro que se está procesando en
cada momento.
RS
(Record separator): contiene el carácter que indica a awk en qué punto del archivo acaba
un registro y empieza el
siguiente. Es “\n” por omisión.
OFS
(Output FS): contiene el separador de campos para la salida generada por awk. La
instrucción print inserta en la
salida un carácter de separación cada vez que aparece una coma en el código.
ORS
(Output RS): Contiene el carácter que awk escribirá al final de cada registro. Es “\n” por
omisión. Obsérvese que
en esta modificación del ejemplo anterior la entrada contiene DOS registros, dada la
aparición del salto de línea en el
centro de la cadena de caracteres entre comillas.
Awk también tiene entre sus bondades poder utilizar operadores como por ejemplo:
<=
Menor ó igual
>=
Mayor ó igual
<
Menor que
>
Mayor que
==
Igual a
&&
Extraer desde la final n1 hasta n2
||
Extraer la fila n1 y n2
A
3
Guía # 6: Programación con awk
III. MATERIALES Y EQUIPO
Para la
No.
1
2
realización de la guía de práctica se requerirá lo siguiente:
Requerimiento
PC de escritorio con Linux
Guía de laboratorio
Cantidad
1
1
IV. PROCEDIMIENTO
1. El siguiente script me permite extraer , la columna deseada para efectos de ejemplo se extrae la
columna 1.
echo "Bienvenidos a la programación con awk" | awk '{print $1}'
2. Con awk se puede utilizar la acción de dos maneras diferentes, la primera creando de la acción
en un archivo externo y sera llama do por medio del parámetro -f y el nombre del archivo que
contiene la acción , la segunda forma es la mas utilizada y es la vista en el primer ejemplo en la
cual la acción se escribe en entre medio de comillas simples, el siguiente ejemplo dará el mismo
resultado que el ejemplo1.
-primero debemos crear el archivo con al acción.
echo '{print $1}' > accion .awk
- ahora podemos ejecutar la sentencia con awk
echo "Bienvenidos a la programacion con awk" | awk -f accion.awk
3. Ahora veremos como crear variables que pueden ser utilizadas en la acción.
ejemplo1
echo "programacion con awk" | awk -v fecha="14/Marzo/2008" '{print $1, fecha}'
ejemplo 2
En este ejemplo se puede ver como extraer
agregar texto.
varias columnas
ademas utilizar una variable y
echo "El se cumple un mes" | awk -v fecha="14/Abril/2008" '{print $1, fecha,
$2,$3,$4,$5, "y soy feliz"}'
4. El siguiente script me permite extraer la fila deseada.
echo -e "Primera fila \nSegunda fila \nTercera fila" | awk ' NR==2 {print $0}'
Este escript me permite extraer la fila numero dos y de ella quiero todos los campos, en otras
palabras toda la linea.
5. Ahora bien para poder ejemplificar de mejor manera se necesita crear el siguiente archivo y que
sera llamado “países.txt”.
A
4
Guía # 6: Programación con awk
España 505 39 Europa
Francia 544 53 Europa
Reino_unido 244 56 Europa
Estados_unidos 9519 237 America
China 9560 1032 Asia
Brasil 8500 134 America
India 3183 810 Asia
Japón 372 120 Asia
Mexico 1970 80 America
6. Ahora apoyados del archivo paises.txt extraeremos un valor en especifico, se presentaran
diferentes ejemplos.
Ejemplo1
Extraer columna tres y fila cinco, el valor a obtener sera 1032.
cat paises | awk 'NR==5 {print $3}'
Ejemplo2
Extraer columna uno y fila dos, el valor a obtener sera Francia.
cat paises | awk 'NR==2 {print $1}'
Ejemplo3
Extraer columna uno y fila ocho, el valor a obtener sera Japón.
cat paises | awk 'NR==8 {print $1}'
Ejemplo4
Extraer columna tres y fila dos, el valor a obtener sera 53.
cat paises | awk 'NR==2 {print $3}'
7. Ahora se utilizaran los operadores para poder extraer un rango de filas.
Ejemplo1
Se extraen de la fila numero tres hasta la fila numero cinco y ademas se extraen todos los
campos.
cat paises | awk 'NR>=3 && NR<=5 {print $0}'
Ejemplo2
Extraer la solamente la fila tres y la fila cinco
cat paises | awk 'NR==3 || NR==5 {print $0}'
8. Si se desea extraer la ultima fila pero si no sabes que numero es, entonces podemos utilizar la
palabra reservada END.
cat paises | awk 'END {print $0}'
9. Ver el numero de registro de cada fila
cat paises | awk '{print NR}'
10. También se pueden combinar las palabras reservadas para obtener un resultado deseado por
ejemplo si se desean saber cuantas registros existen en total.
A
5
Guía # 6: Programación con awk
cat paises | awk 'END {print NR}'
11. Ver el contenido de aquellas filas que sean diferente de la elegida.
cat paises | awk 'NR!=5 {print $0}'
12. Digitar el siguiente script luego probarlo:
#!/bin/bash
# usuarios: lista datos de usuarios
echo "Nombres de usuarios, Directorio propio, intérprete de comandos"
cat /etc/passwd | awk -F: '{print $1,$6,$7}' | sort | more -5
13. Digite las siguientes sentencias en consola y luego interpretes las salidas.
echo -e "Primera fila\nSegunda fila\nTercera fila" | awk 'BEGIN{RS="e" } {print $0}'
y
echo -e "Primera fila\nSegunda fila\nTercera fila" | awk 'BEGIN{ORS="e" } {print $0}'
V. DISCUSION DE RESULTADOS
1-Implementar el comando necesario par poder obtener, el numero de registros y el valor de cada
fila el siguiente resultado:
1 España 505 39 Europa
2 Francia 544 53 Europa
3 Reino_unido 244 56 Europa
4 Estados_unidos 9519 237 America
5 China 9560 1032 Asia
6 Brasil 8500 134 America
7 India 3183 810 Asia
8 Japón 372 120 Asia
9 Mexico 1970 80 America
2-Crear un menú en el cual pueda tener la facilidad de extraer valores >, <,==, registros en
especifico, campos especifico, ver el total de registros de un archivo en especifico, el archivo a
utilizar deber ser pasado como parámetro .
3-)Crear un script que me permita extraer del archivo /etc/passwd, el nombre del usuario, y su uid.
4-)Crear un script que me pida el nombre de un usuario, luego verificara si existe en el archivo
/etc/passwd, si existe imprimirá su nombre, uid y su shell por defecto, si este usuario no existe,
imprimirá un mensaje que diga “Este Usuario no existe”.
5)el comando nmap localhost me devuelve una salida similar a la siguientes
Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-28 13:40 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000022s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 995 closed ports
PORT
STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind
631/tcp open ipp
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
crear un programa con awk que me permita obtener el siguiente resultado y que sea guardado en un archivo que se llame
puertosabiertos.txt:
A
6
Guía # 6: Programación con awk
22/tcp ssh
25/tcp smtp
111/tcp rpcbind
631/tcp ipp
3306/tcp mysql
Nota: los ejercicios 3 y 4 serán llamados por medio de un menú.
VII. BIBLIOGRAFIA
 Linux. Manual de Administración, Steve Shah, McGraw-Hill 2001
 Linux. Guía de instalación y administración, Vicente López Camacho, McGraw-Hill, 2001
A
7
Descargar