SlideShare a Scribd company logo
1 of 44
Download to read offline
108/03/15
Ing. David Barreto Llano (david-barreto.com)
Introducción al Lenguaje de
Programación AWK
208/03/15
Ing. David Barreto Llano (david-barreto.com)
Características del Lenguaje
Lenguaje de programación orientado a datos
Basado en la detección de patrones en los datos por medio
de expresiones regulares
Es un lenguaje muy simple que no permite la creación de
clases u objetos
Solo implementa variables, arreglos asociativos y
estructuras de control
Ideal para el procesamiento de logs
Liviano, rápido e integrado con el shell de Linux
Tiene un set limitado de funciones predefinidas
308/03/15
Ing. David Barreto Llano (david-barreto.com)
Historia de AWK
AWK fue Creado en 1977 en “AT&T Bell Laboratories”
El nombre del lenguaje son las siglas de los apellidos de sus
creadores: Aho, Weinberger y Kernighan
En 1985 se crea una nueva versión del lenguaje y se bautiza
como NAWK (New AWK)
Entre 1986 y 1989, un equipo de voluntarios, con ayuda de
Richard Stallman (fundador del movimiento del software libre)
crea una versión libre de NAWK pero más potente y es
llamado GAWK (GNU AWK)
408/03/15
Ing. David Barreto Llano (david-barreto.com)
Las diferentes versiones de AWK
Algunos sistemas mantienen AWK y NAWK como programas
independientes
Algunos sistemas han renombrado AWK como OAWK (Old
AWK) e internamente redireccionan AWK hacia NAWK o
hacia GAWK
Algunos sistemas mantiene de forma independiente todas las
versiones del lenguaje: AWK, NAWK y GAWK
El sistema operativo Canaima trae la versión AWK
redireccionado a NAWK. Canaima no trae de forma nativa
GAWK
Para instalar GAWK en Canaima: sudo apt-get install gawk
Para instalar GAWK en Windows: (Google) GAWK for Widows
508/03/15
Ing. David Barreto Llano (david-barreto.com)
¿Cómo determinar la versión de AWK?
$> man awk
608/03/15
Ing. David Barreto Llano (david-barreto.com)
Estructura Básica
Un programa AWK consta de un conjunto de reglas, que
buscan patrones sobre los archivos de entrada y ejecuta
acciones si encuentra una coincidencia
$1 == "abc" || $2 > 30 {
suma = $1+$2+5
print(suma)
}
Patrón
Regla
Acción
708/03/15
Ing. David Barreto Llano (david-barreto.com)
Estructura Básica
Los campos de cada entrada se acceden usando números
precedidos por el símbolo de dólar
$1 = Accede al primer campo de la entrada
$2 = Accede al segundo campo de la entrada
$N = Accede al enésimo campo de la entrada (N={1,2,3,..})
$0 = Accede a toda la entrada
Si se trata de acceder a un campo inexistente AWK retorna
un string vacío
808/03/15
Ing. David Barreto Llano (david-barreto.com)
Estructura Básica
Existen reglas especiales que se ejecutan una sola vez al
inicio (BEGIN) y al final (END)
Si se omite el patrón de una regla, la acción se ejecuta
siempre para todas las entradas
Si se omite la acción, no se realiza ninguna operación
Las reglas se ejecutan en el mismo orden en que son
definidas
908/03/15
Ing. David Barreto Llano (david-barreto.com)
Estructura Básica
Los campos de cada entrada se acceden usando números
precedidos por el símbolo de dólar
$1 = Accede al primer campo de la entrada
$2 = Accede al segundo campo de la entrada
$N = Accede al enésimo campo de la entrada (N={1,2,3,..})
$0 = Accede a toda la entrada
Si se trata de acceder a un campo inexistente AWK retorna
un string vacío
1008/03/15
Ing. David Barreto Llano (david-barreto.com)
Ejemplos de Uso
$2 == "Oriente" {
print($1)
}
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
Albany
$2 == "Caracas" {
print($1)
}
$1 == "Gabriela" {
print($2)
}
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
David
Occidente
BEGIN { print("Inicio") }
{ print($2) }
END { print("Fin") }
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
Inicio
Caracas
Occidente
Centro
Oriente
Fin
1108/03/15
Ing. David Barreto Llano (david-barreto.com)
Ejecutar BEGIN
Leer próxima entrada
Validar el patrón en la entrada ¿Hay coincidencia?
¿Fin del archivo?
Ejecutar END
Ejecutar acción
Algoritmo de ejecución de AWK (resumen)
NO
NO
SI
SI
1208/03/15
Ing. David Barreto Llano (david-barreto.com)
Formas de Ejecutar de AWK
Desde la línea de comandos
gawk '{ print($1) }' optimizacion_v2.txt
Desde la linea de comandos usado como parte de un “pipe” del
shell
cat optimizacion_v2.txt | gawk '{ print($1) }'
Desde un archivo
gawk -f procesador.awk optimizacion_v2.txt
gawk -f procesador.awk optimizacion_v2.txt > resultado.txt
1308/03/15
Ing. David Barreto Llano (david-barreto.com)
David Barreto, (0416) 629-0508, Caracas
David Mercado, (0416) 613-4416, Oriente
Jerald Almeida, (0212) 705-7456, Caracas
Víctor Prieto, (0426) 896-7706, Centro
optimizacion_v1.txt
procesador.awk
{ print($1) }
{ print($1, $4) }
BEGIN {
FS = ","
}
{ print($1, $3) }
BEGIN {
FS = ","
OFS = ";"
}
{ print($1, $3) }
BEGIN {
FS = ","
OFS = ";"
}
$3 == "Caracas" {
print($1, $3)
}
BEGIN {
FS = ","
OFS = ";"
}
$3 == " Caracas" {
print($1, $3)
}
BEGIN {
FS = ", "
OFS = ";"
}
$3 == "Caracas" {
print($1, $3)
}
BEGIN {
FS = ", "
OFS = ";"
}
$1 ~ /David/ {
print("David de " $3)
}
gawk -f procesador.awk optimizacion_v1.txt
¿Qué resultado genera cada
uno de estas variantes del
archivo "procesador.awk"?
1408/03/15
Ing. David Barreto Llano (david-barreto.com)
Comentarios en el Código
Los comentarios son líneas de texto dentro del código que
son ignoradas por el interpretador
Funcionan como referencias documentales para el
programador
En AWK los comentarios se inician con el símbolo "#"
No existe un símbolo de comentario multilínea
# Compara el campo 1 con el valor 5
# e indica si hay match
$1 == 5 {
print("match!") # Texto de referencia
}
1508/03/15
Ing. David Barreto Llano (david-barreto.com)
Función interna del lenguaje "print"
Imprime resultados en la consola o en un archivo de salida e
inserta un salto de línea (n) al final
{ print($1) }
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
David
Gabriela
Jonathan
Albany{ print $1 }
{ print($1, $2) }
{ print("Hola " $1) }
Hola David
Hola Gabriela
Hola Jonathan
Hola Albany
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
optimizacion_v2.txt
1608/03/15
Ing. David Barreto Llano (david-barreto.com)
Estructuras de control
Estructura if-else
Estructura for
if(power > 15) {
print("BTS de alta potencia")
} else {
print("BTS de baja potencia")
}
for(i=0; i<5; i++) {
print(i)
}
1708/03/15
Ing. David Barreto Llano (david-barreto.com)
Arreglos
AWK tiene un manejo muy básico de los arreglos
En AWK todos los arreglos son asociativos
No hay forma de inicializar un arreglo con valores
celdas[88] = "Catia"
celdas[140] = "Altamira"
celdas["23"] = "San Martín"
celdas["Modcell"] = 1
#Esto no es válido...
frutas = ["fresa", "mora", "piña"]
#Esto si es válido...
frutas[0] = "fresa"
frutas[1] = "mora"
frutas[2] = "piña"
1808/03/15
Ing. David Barreto Llano (david-barreto.com)
Arreglos
Operaciones básicas
Buscar un índice dentro de un arreglo
#Asignación de valores a un arreglo
capitales["Venezuela"] = "Caracas"
capitales["Colombia"] = "Bogotá"
#Lectura de valores de un arreglo
print(capitales["Venezuela"])
#Eliminación de valores de un arreglo
delete capitales["Venezuela"]
if("Colombia" in capitales) {
print("Colombia es un índice del arreglo")
} else {
print("Colombia no es un índice del arreglo")
}
1908/03/15
Ing. David Barreto Llano (david-barreto.com)
Arreglos
Recorrer todos los elementos de un arreglo
Buscar un valor dentro de un arreglo
for(i in capitales) {
print(capitales[i])
}
found = 0
for(capital in capitales) {
if(capitales[capital] == "Caracas") {
found = 1
break
}
}
if(found) {
print("Caracas es un valor del arreglo")
}
2008/03/15
Ing. David Barreto Llano (david-barreto.com)
Arreglos: Consideraciones Especiales
Para emular una inicialización de un arreglo en una sola
línea, se debe hacer uso de la función split
Cuando se hace referencia a un elemento del arreglo que no
existe, AWK automáticamente le asigna el valor del string
vacío
split("fresa mora piña", frutas, " ")
capitales["Venezuela"] = "Caracas"
capitales["Colombia"] = "Bogotá"
#En otros lenguajes esto daría un error
cap_ecuador = capitales["Ecuador"] #cap_ecuador == ""
2108/03/15
Ing. David Barreto Llano (david-barreto.com)
Función interna del lenguaje "printf"
Similar a print pero permite un mayor control del formato
No inserta de forma automática un salto de línea al final
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
{ printf("%s pertenece a %sn", $1, $2) }
David pertenece a Caracas
Gabriela pertenece a Occidente
Jonathan pertenece a Centro
Albany pertenece a Oriente
2208/03/15
Ing. David Barreto Llano (david-barreto.com)
Letras de control de formato
%i, %d: Imprime números enteros (integers)
%s: Imprime cadenas de texto (strings)
%f: Imprime valores de punto flotante (floats)
awk 'BEGIN{printf("%i %s tienen %f bolívaresn",5,"personas",2500)}'
5 personas tienen 2500.000000 bolívares
2308/03/15
Ing. David Barreto Llano (david-barreto.com)
Modificadores del formato
Posición (N$): Permite usar variables por posición
Precisión (.N): Indica la cantidad de decimales para imprimir
gawk 'BEGIN{printf("%1$s: CELL %1$s; SECTOR %2$in", "00981", 2)}'
00981: CELL 00981; SECTOR 2
gawk 'BEGIN{printf("En la cuenta hay %.2f bolívaresn", 7800)}'
En la cuenta hay 7800.00 bolívares
2408/03/15
Ing. David Barreto Llano (david-barreto.com)
Redireccionamiento de la Salida
Por default, la salida de AWK (print, printf) va directamente a
la consola
El redireccionamiento de la salida se puede definir desde el
comando de invocación o dentro del propio código
awk 'BEGIN{print("hola")}' > salida.txt
BEGIN {
print("hola") > "salida.txt"
}
2508/03/15
Ing. David Barreto Llano (david-barreto.com)
Redireccionamiento de la Salida
Dentro del código, existen dos formas de redireccionamiento:
borrar y agregar (>) o solo agregar (>>)
#Si salida.txt no existe, AWK lo crea automáticamente
BEGIN {
print("hola") > "salida.txt" #Borra el contenido primero
print("chao") > "salida.txt" #Agrega la información
}
#Si salida.txt no existe, AWK lo crea automáticamente
BEGIN {
print("hola") >> "salida.txt" #Agrega la información
print("chao") >> "salida.txt" #Agrega la información
}
2608/03/15
Ing. David Barreto Llano (david-barreto.com)
Variables Predefinidas
FS (Field Separator): Separador de campo de entrada
OFS (Output Field Separator): Separador de campo de salida
RS (Record Separator): Separador de fila de entrada
ORS (Output Record Separator): Separador de fila de salida
NF (Number of Fields): Cantidad de campos de la fila actual
NR (Number of Records): Cantidad de filas del archivo
FNR (actual Record Number): Número de la fila actual
2708/03/15
Ing. David Barreto Llano (david-barreto.com)
FS: Separador de Campo de Entrada
Define el caracter o conjunto de caracteres que serán usados
para la separación de los campos de una "entrada"
BEGIN {
FS = ";"
}
{ print($2) }
David; Caracas
Gabriela; Occidente
Jonathan; Centro
Albany; Oriente
Caracas
Occidente
Centro
Oriente
BEGIN {
FS = "..."
}
{ print($2) }
David...Caracas
Gabriela...Occidente
Jonathan...Centro
Albany...Oriente
Caracas
Occidente
Centro
Oriente
optimizacion_v2.txt
2808/03/15
Ing. David Barreto Llano (david-barreto.com)
FS: Separador de Campo de Entrada
Su valor por defecto es el caracter vacío (" "). Este es un
caso especial que incluye cualquier cantidad de espacios
consecutivos o tabulaciones (t)
Ignora los espacios en blanco al inicio o al final de la entrada
{ print($2) }
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
Caracas
Occidente
Centro
Oriente
{ print($2) }
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
Caracas
Occidente
Centro
Oriente
2908/03/15
Ing. David Barreto Llano (david-barreto.com)
FS: Separador de Campo de Entrada
El separador de campo puede ser definido como una
expresión regular
BEGIN {
FS = "--[abcd]--"
}
{ print($2) }
David--a--Caracas
Gabriela--b--Occidente
Jonathan--c--Centro
Albany--d--Oriente
Caracas
Occidente
Centro
Oriente
BEGIN {
FS = "(=)+"
}
{ print($2) }
David======Caracas
Gabriela===Occidente
Jonathan===Centro
Albany=====Oriente
Caracas
Occidente
Centro
Oriente
3008/03/15
Ing. David Barreto Llano (david-barreto.com)
FS: Separador de Campo de Entrada
Si se usa el string vacío ("") como separador de campo, cada
caracter de la entrada se convierte en un campo
independiente
BEGIN {
FS = ""
}
{ print($2) }
David; Caracas
Gabriela; Occidente
Jonathan; Centro
Albany; Oriente
a
a
o
l
3108/03/15
Ing. David Barreto Llano (david-barreto.com)
OFS: Separador de Campo de Salida
Define el o los caracteres de separación de los campos, al
momento de "imprimir" resultados en la consola o en un
archivo de texto
BEGIN {
FS = "--"
OFS = "; "
}
{ print($1, $2) }
David--Caracas
Gabriela--Occidente
Jonathan--Centro
Albany --Oriente
David; Caracas
Gabriela; Occidente
Jonathan; Centro
Albany; Oriente
BEGIN {
FS = "--"
OFS = "; "
}
{
$1 = $1
print($0)
}
David--Caracas
Gabriela--Occidente
Jonathan--Centro
Albany --Oriente
David; Caracas
Gabriela; Occidente
Jonathan; Centro
Albany; Oriente
3208/03/15
Ing. David Barreto Llano (david-barreto.com)
NF: Número de campos de la entrada
El campo NF es una variable propia del lenguaje que nos
informa cuantos campos hay por entrada
Se define automáticamente para cada entrada procesada
Es usado para acceder al último (penúltimo, antepenúltimo,
etc.) elemento de una entrada
{ print(NF) }
a b c d
x y
3 2 5
4
2
3
{ print($NF) }
a b c d
x y
3 2 5
d
y
5
{ print($(NF-1)) }
a b c d
x y
3 2 5
c
x
2
random_v1.txt
3308/03/15
Ing. David Barreto Llano (david-barreto.com)
El Campo $0: Impresión con separador
Cuando se imprime el campo $0, se imprime la entrada
completa igual a como aparece en la fuente
Para imprimir la entrada con el nuevo caracter se separación
(OFS), se debe primero realizar una asignación "dummy"
BEGIN {
OFS = ", "
}
{ print($0) }
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
BEGIN {
OFS = ", "
}
{
$1 = $1
print($0)
}
David Caracas
Gabriela Occidente
Jonathan Centro
Albany Oriente
David, Caracas
Gabriela, Occidente
Jonathan, Centro
Albany, Oriente
3408/03/15
Ing. David Barreto Llano (david-barreto.com)
Valores Booleanos
AWK no implementa las constantes True o False como la
mayoría de los lenguajes para definir valores booleanos
En su lugar, AWK toma el valor 0 y el string vacío como
False y cualquier otro valor como True
Las expresiones lógicas en AWK retornan 1 (True) ó 0 (False)
if(5 == 5) # 1 (True)
if("Juan") # 1 (True)
if(34567) # 1 (True)
if(0) # 0 (False)
if("") # 0 (False)
3508/03/15
Ing. David Barreto Llano (david-barreto.com)
Operadores Lógicos
Operador AND: Ambas condiciones deben cumplirse
Operador OR: Al menos una condición debe cumplirse
Operador NOT: Negación de la expresión
(5 >= 3) && (4 < 6)
(5 >= 6) && (4 < 6)
(5 >= 3) || (4 == 3)
(5 >= 5) || (4 <= 5)
!(3 == 3) || !(2 > 1)
!((3 > 4) && (5 == 3))
# 1 (True)
# 0 (False)
# 1 (True)
# 1 (True)
# 0 (False)
# 1 (True)
3608/03/15
Ing. David Barreto Llano (david-barreto.com)
Patrones Combinados
Bolígrafo 30 64.99
Lápiz 80 15.50
Borrador 0 8.75
Libro 0 350.00
Cuaderno 12 199.99
Libreta 19 235.00
$1 ~ /^L/ && $3 > 30 {
print($0)
}
$1 == "Lápiz" || $1 == "Borrador" {
print($0)
}
$3 >= 30 && $3 <= 100 {
print($0)
}
($1 ~ /[Bb]/ && $2 > 0) || $3 <= 20 {
print($0)
}
inventario.txt
3708/03/15
Ing. David Barreto Llano (david-barreto.com)
Expresiones Regulares
Una expresión regular es un conjunto de símbolos que
permiten realizar una búsqueda por patrones de texto
Las expresiones regulares usualmente están demarcadas
entre símbolos de slash (/)
/uan/
El operador de coincidencia es el símbolo ~
$1 ~ /uan/ { … }
Se puede aplicar el operador de negación sobre el operador
de coincidencia !~
$1 !~ /uan/ { … }
AWK permite usar expresiones regulares para definir
variables del lenguaje como FS y RS
3808/03/15
Ing. David Barreto Llano (david-barreto.com)
Ejemplos de Expresiones Regulares
Buscar las palabras que contengan la secuencia "in"
Buscar las palabras que empiecen por "L"
Liso
Lino
Pino
limón
512
$1 ~ /in/ {
print($1)
}
Lino
Pino
Liso
Lino
Pino
limón
512
$1 ~ /^L/ {
print($1)
}
Liso
Lino
random_v2.txt
3908/03/15
Ing. David Barreto Llano (david-barreto.com)
Ejemplos de Expresiones Regulares
Buscar las palabras que empiecen por "L" o "l"
Buscar las palabras que terminen con "no"
Liso
Lino
Pino
limón
512
$1 ~ /^[Ll]/ {
print($1)
}
Liso
Lino
limón
Liso
Lino
Pino
limón
512
$1 ~ /no$/ {
print($1)
}
Lino
Pino
4008/03/15
Ing. David Barreto Llano (david-barreto.com)
Expresiones Regulares
Buscar las "palabras" que consten exclusivamente de números
Buscar las palabras contengan una secuencia que inicia con "i",
seguida de cualquier letra, seguida de la letra "o"
Liso
Lino
Pino
limón
512
$1 ~ /^[0-9]$/ {
print($1)
}
512
Liso
Lino
Pino
limón
512
$1 ~ /i.o/ {
print($1)
}
Liso
Lino
Pino
4108/03/15
Ing. David Barreto Llano (david-barreto.com)
Expresiones Regulares
Buscar las "palabras" que contengan una secuencia que inicie
con 1 y tenga al menos un 8 a continuación
Buscar las "palabras" que contengan una secuencia que inicie
con 1 y tenga cero, uno o varios 8 a continuación
189
21889
2198
8888
1982
$1 ~ /1(8)+/ {
print($1)
}
189
21889
189
21889
2198
8888
1982
$1 ~ /1(8)*/ {
print($1)
}
189
21889
2198
1982
4208/03/15
Ing. David Barreto Llano (david-barreto.com)
Expresiones Regulares
Buscar las "palabras" que contengan una secuencia que inicie
con 1 y tenga al menos dos 8 a continuación
Buscar las "palabras" que contengan una secuencia que tenga
entre 2 y 4 números ocho consecutivos
189
21889
2198
8888
1982
$1 ~ /1(8){2,}/ {
print($1)
}
21889
189
21889
2198
8888
1982
$1 ~ /(8){2,4}/ {
print($1)
}
21889
8888
4308/03/15
Ing. David Barreto Llano (david-barreto.com)
Funciones
Las funciones son bloques de código reutilizables
function comando_btseqp(bts, potencia) {
printf("BTS: %s - Power: %0.f", bts, potencia)
}
$2 == 507 {
comando_btseqp($1, $3)
}
4408/03/15
Ing. David Barreto Llano (david-barreto.com)
Funciones
Las funciones en AWK pueden definirse en cualquier parte
del código fuente
Si se invoca una función sin definir uno o más parámetros,
estos adquieren automáticamente el valor del string vacío
Dentro de una función no es posible definir variables locales.
Para ello, se definene parámetros para los cuales nunca se le
asignan argumentos
function comando(bts, potencia, i) {
i = 3
printf("%i) BTS: %s - Power: %0.f", i, bts, potencia)
}
2 == 507 {
i = 2
comando_btseqp($1, $3)
print(i)
}

More Related Content

What's hot

Clone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13c
Clone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13cClone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13c
Clone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13cAlfredo Krieg
 
Tems training
Tems trainingTems training
Tems trainingbishal406
 
VMware vSphere vsan EN.pptx
VMware vSphere vsan EN.pptxVMware vSphere vsan EN.pptx
VMware vSphere vsan EN.pptxCH431
 
Standard Edition High Availability (SEHA) - The Why, What & How
Standard Edition High Availability (SEHA) - The Why, What & HowStandard Edition High Availability (SEHA) - The Why, What & How
Standard Edition High Availability (SEHA) - The Why, What & HowMarkus Michalewicz
 
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Osama Mustafa
 
Design Issues and Challenges in Wireless Sensor Networks
Design Issues and Challenges in Wireless Sensor NetworksDesign Issues and Challenges in Wireless Sensor Networks
Design Issues and Challenges in Wireless Sensor NetworksKhushbooGupta145
 
Cisco SDWAN - Components Deployment Workflow
Cisco SDWAN - Components Deployment WorkflowCisco SDWAN - Components Deployment Workflow
Cisco SDWAN - Components Deployment WorkflowFarooq Khan
 
Oracle Exadata Maintenance tasks 101 - OTN Tour 2015
Oracle Exadata Maintenance tasks 101 - OTN Tour 2015Oracle Exadata Maintenance tasks 101 - OTN Tour 2015
Oracle Exadata Maintenance tasks 101 - OTN Tour 2015Nelson Calero
 
DevOps Memes @ EMCworld 2015
DevOps Memes @ EMCworld 2015 DevOps Memes @ EMCworld 2015
DevOps Memes @ EMCworld 2015 Brian Gracely
 
2 g parameters_guidelines1
2 g parameters_guidelines12 g parameters_guidelines1
2 g parameters_guidelines1James Mutuku
 
E nodeb commissioning guide(v100r005c00 04)(pdf)-en
E nodeb commissioning guide(v100r005c00 04)(pdf)-enE nodeb commissioning guide(v100r005c00 04)(pdf)-en
E nodeb commissioning guide(v100r005c00 04)(pdf)-enVugar Ali
 
LTE KPI Optimization - A to Z Abiola.pptx
LTE KPI Optimization - A to Z Abiola.pptxLTE KPI Optimization - A to Z Abiola.pptx
LTE KPI Optimization - A to Z Abiola.pptxssuser574918
 
Oracle applications r12.2, ebr, online patching means lot of work for devel...
Oracle applications r12.2, ebr, online patching   means lot of work for devel...Oracle applications r12.2, ebr, online patching   means lot of work for devel...
Oracle applications r12.2, ebr, online patching means lot of work for devel...Ajith Narayanan
 
EMC Data domain advanced features and functions
EMC Data domain advanced features and functionsEMC Data domain advanced features and functions
EMC Data domain advanced features and functionssolarisyougood
 
Introducing new AIOps innovations in Oracle 19c - San Jose AICUG
Introducing new AIOps innovations in Oracle 19c - San Jose AICUGIntroducing new AIOps innovations in Oracle 19c - San Jose AICUG
Introducing new AIOps innovations in Oracle 19c - San Jose AICUGSandesh Rao
 
SAS DATAFLUX DATA MANAGEMENT STUDIO TRAINING
SAS DATAFLUX DATA MANAGEMENT STUDIO TRAININGSAS DATAFLUX DATA MANAGEMENT STUDIO TRAINING
SAS DATAFLUX DATA MANAGEMENT STUDIO TRAININGbidwhm
 
4G troubleshooting
4G troubleshooting4G troubleshooting
4G troubleshootingThang Dang
 
Lecture 5 6 .ad hoc network
Lecture 5 6 .ad hoc networkLecture 5 6 .ad hoc network
Lecture 5 6 .ad hoc networkChandra Meena
 

What's hot (20)

Clone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13c
Clone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13cClone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13c
Clone Oracle Databases In Minutes Without Risk Using Enterprise Manager 13c
 
Tems training
Tems trainingTems training
Tems training
 
VMware vSphere vsan EN.pptx
VMware vSphere vsan EN.pptxVMware vSphere vsan EN.pptx
VMware vSphere vsan EN.pptx
 
Standard Edition High Availability (SEHA) - The Why, What & How
Standard Edition High Availability (SEHA) - The Why, What & HowStandard Edition High Availability (SEHA) - The Why, What & How
Standard Edition High Availability (SEHA) - The Why, What & How
 
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
 
Design Issues and Challenges in Wireless Sensor Networks
Design Issues and Challenges in Wireless Sensor NetworksDesign Issues and Challenges in Wireless Sensor Networks
Design Issues and Challenges in Wireless Sensor Networks
 
Cisco SDWAN - Components Deployment Workflow
Cisco SDWAN - Components Deployment WorkflowCisco SDWAN - Components Deployment Workflow
Cisco SDWAN - Components Deployment Workflow
 
Oracle Exadata Maintenance tasks 101 - OTN Tour 2015
Oracle Exadata Maintenance tasks 101 - OTN Tour 2015Oracle Exadata Maintenance tasks 101 - OTN Tour 2015
Oracle Exadata Maintenance tasks 101 - OTN Tour 2015
 
DevOps Memes @ EMCworld 2015
DevOps Memes @ EMCworld 2015 DevOps Memes @ EMCworld 2015
DevOps Memes @ EMCworld 2015
 
2 g parameters_guidelines1
2 g parameters_guidelines12 g parameters_guidelines1
2 g parameters_guidelines1
 
Commands...
Commands...Commands...
Commands...
 
E nodeb commissioning guide(v100r005c00 04)(pdf)-en
E nodeb commissioning guide(v100r005c00 04)(pdf)-enE nodeb commissioning guide(v100r005c00 04)(pdf)-en
E nodeb commissioning guide(v100r005c00 04)(pdf)-en
 
Wcdma channels
Wcdma channels Wcdma channels
Wcdma channels
 
LTE KPI Optimization - A to Z Abiola.pptx
LTE KPI Optimization - A to Z Abiola.pptxLTE KPI Optimization - A to Z Abiola.pptx
LTE KPI Optimization - A to Z Abiola.pptx
 
Oracle applications r12.2, ebr, online patching means lot of work for devel...
Oracle applications r12.2, ebr, online patching   means lot of work for devel...Oracle applications r12.2, ebr, online patching   means lot of work for devel...
Oracle applications r12.2, ebr, online patching means lot of work for devel...
 
EMC Data domain advanced features and functions
EMC Data domain advanced features and functionsEMC Data domain advanced features and functions
EMC Data domain advanced features and functions
 
Introducing new AIOps innovations in Oracle 19c - San Jose AICUG
Introducing new AIOps innovations in Oracle 19c - San Jose AICUGIntroducing new AIOps innovations in Oracle 19c - San Jose AICUG
Introducing new AIOps innovations in Oracle 19c - San Jose AICUG
 
SAS DATAFLUX DATA MANAGEMENT STUDIO TRAINING
SAS DATAFLUX DATA MANAGEMENT STUDIO TRAININGSAS DATAFLUX DATA MANAGEMENT STUDIO TRAINING
SAS DATAFLUX DATA MANAGEMENT STUDIO TRAINING
 
4G troubleshooting
4G troubleshooting4G troubleshooting
4G troubleshooting
 
Lecture 5 6 .ad hoc network
Lecture 5 6 .ad hoc networkLecture 5 6 .ad hoc network
Lecture 5 6 .ad hoc network
 

Viewers also liked

Metodología Scrum (Ing. David Barreto)
Metodología Scrum (Ing. David Barreto)Metodología Scrum (Ing. David Barreto)
Metodología Scrum (Ing. David Barreto)David Barreto
 
Angular Optimization Web Performance Meetup
Angular Optimization Web Performance MeetupAngular Optimization Web Performance Meetup
Angular Optimization Web Performance MeetupDavid Barreto
 
Angular performance slides
Angular performance slidesAngular performance slides
Angular performance slidesDavid Barreto
 
Manifiesto agil
Manifiesto agilManifiesto agil
Manifiesto agiltembla535
 
Los principios ágiles (Madrid)
Los principios ágiles (Madrid)Los principios ágiles (Madrid)
Los principios ágiles (Madrid)Jose Manuel Beas
 
Scrum process powerpoint ppt slides.
Scrum process powerpoint ppt slides.Scrum process powerpoint ppt slides.
Scrum process powerpoint ppt slides.SlideTeam.net
 

Viewers also liked (6)

Metodología Scrum (Ing. David Barreto)
Metodología Scrum (Ing. David Barreto)Metodología Scrum (Ing. David Barreto)
Metodología Scrum (Ing. David Barreto)
 
Angular Optimization Web Performance Meetup
Angular Optimization Web Performance MeetupAngular Optimization Web Performance Meetup
Angular Optimization Web Performance Meetup
 
Angular performance slides
Angular performance slidesAngular performance slides
Angular performance slides
 
Manifiesto agil
Manifiesto agilManifiesto agil
Manifiesto agil
 
Los principios ágiles (Madrid)
Los principios ágiles (Madrid)Los principios ágiles (Madrid)
Los principios ágiles (Madrid)
 
Scrum process powerpoint ppt slides.
Scrum process powerpoint ppt slides.Scrum process powerpoint ppt slides.
Scrum process powerpoint ppt slides.
 

Similar to Curso de AWK (David Barreto)

Primeros Pasos Aplicacion Java conexión BD Mysql
Primeros Pasos Aplicacion Java conexión BD MysqlPrimeros Pasos Aplicacion Java conexión BD Mysql
Primeros Pasos Aplicacion Java conexión BD MysqlEmerson Garay
 
0157 genexus full_throttling
0157 genexus full_throttling0157 genexus full_throttling
0157 genexus full_throttlingGeneXus
 
0157 genexus full_throttling
0157 genexus full_throttling0157 genexus full_throttling
0157 genexus full_throttlingGeneXus
 
Programando en-serio-con-visual-basic
Programando en-serio-con-visual-basicProgramando en-serio-con-visual-basic
Programando en-serio-con-visual-basicusuario230
 
Base de datos dinamicas
Base de datos dinamicasBase de datos dinamicas
Base de datos dinamicasel_rosales
 
Programacion c# vbnet
Programacion c# vbnetProgramacion c# vbnet
Programacion c# vbnetKevin Reaño
 
Dce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnetDce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnetmaurgilez
 
Dce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnetDce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnetmaurgilez
 
Creación de funciones postgre sql
Creación de funciones postgre sqlCreación de funciones postgre sql
Creación de funciones postgre sqlEddie Malca
 
Cuellos botella en PostgreSQL
Cuellos botella en PostgreSQLCuellos botella en PostgreSQL
Cuellos botella en PostgreSQLEQ SOFT EIRL
 
Dominando las funciones de ventana (window functions) en TSQL
Dominando las funciones de ventana (window functions) en TSQLDominando las funciones de ventana (window functions) en TSQL
Dominando las funciones de ventana (window functions) en TSQLSpanishPASSVC
 
ManualPracticoSQL.pdf
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdfJenny29068
 
ETL: Logging y auditoría en SSIS
ETL: Logging y auditoría en SSISETL: Logging y auditoría en SSIS
ETL: Logging y auditoría en SSISSolidQ
 

Similar to Curso de AWK (David Barreto) (20)

Primeros Pasos Aplicacion Java conexión BD Mysql
Primeros Pasos Aplicacion Java conexión BD MysqlPrimeros Pasos Aplicacion Java conexión BD Mysql
Primeros Pasos Aplicacion Java conexión BD Mysql
 
0157 genexus full_throttling
0157 genexus full_throttling0157 genexus full_throttling
0157 genexus full_throttling
 
0157 genexus full_throttling
0157 genexus full_throttling0157 genexus full_throttling
0157 genexus full_throttling
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Funciones de-visual
Funciones de-visualFunciones de-visual
Funciones de-visual
 
Funciones de-visual
Funciones de-visualFunciones de-visual
Funciones de-visual
 
Programando en-serio-con-visual-basic
Programando en-serio-con-visual-basicProgramando en-serio-con-visual-basic
Programando en-serio-con-visual-basic
 
Base de datos dinamicas
Base de datos dinamicasBase de datos dinamicas
Base de datos dinamicas
 
 
Programacion c# vbnet
Programacion c# vbnetProgramacion c# vbnet
Programacion c# vbnet
 
Dce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnetDce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnet
 
Dce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnetDce0 programacion oo_c#_vbnet
Dce0 programacion oo_c#_vbnet
 
Programacion C#_vbnet
Programacion C#_vbnetProgramacion C#_vbnet
Programacion C#_vbnet
 
Creación de funciones postgre sql
Creación de funciones postgre sqlCreación de funciones postgre sql
Creación de funciones postgre sql
 
Cuellos botella en PostgreSQL
Cuellos botella en PostgreSQLCuellos botella en PostgreSQL
Cuellos botella en PostgreSQL
 
Dominando las funciones de ventana (window functions) en TSQL
Dominando las funciones de ventana (window functions) en TSQLDominando las funciones de ventana (window functions) en TSQL
Dominando las funciones de ventana (window functions) en TSQL
 
ManualPracticoSQL.pdf
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdf
 
ETL: Logging y auditoría en SSIS
ETL: Logging y auditoría en SSISETL: Logging y auditoría en SSIS
ETL: Logging y auditoría en SSIS
 
Generador codigo
Generador codigoGenerador codigo
Generador codigo
 
Algoritmos1
Algoritmos1Algoritmos1
Algoritmos1
 

Recently uploaded

LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 

Recently uploaded (20)

LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 

Curso de AWK (David Barreto)

  • 1. 108/03/15 Ing. David Barreto Llano (david-barreto.com) Introducción al Lenguaje de Programación AWK
  • 2. 208/03/15 Ing. David Barreto Llano (david-barreto.com) Características del Lenguaje Lenguaje de programación orientado a datos Basado en la detección de patrones en los datos por medio de expresiones regulares Es un lenguaje muy simple que no permite la creación de clases u objetos Solo implementa variables, arreglos asociativos y estructuras de control Ideal para el procesamiento de logs Liviano, rápido e integrado con el shell de Linux Tiene un set limitado de funciones predefinidas
  • 3. 308/03/15 Ing. David Barreto Llano (david-barreto.com) Historia de AWK AWK fue Creado en 1977 en “AT&T Bell Laboratories” El nombre del lenguaje son las siglas de los apellidos de sus creadores: Aho, Weinberger y Kernighan En 1985 se crea una nueva versión del lenguaje y se bautiza como NAWK (New AWK) Entre 1986 y 1989, un equipo de voluntarios, con ayuda de Richard Stallman (fundador del movimiento del software libre) crea una versión libre de NAWK pero más potente y es llamado GAWK (GNU AWK)
  • 4. 408/03/15 Ing. David Barreto Llano (david-barreto.com) Las diferentes versiones de AWK Algunos sistemas mantienen AWK y NAWK como programas independientes Algunos sistemas han renombrado AWK como OAWK (Old AWK) e internamente redireccionan AWK hacia NAWK o hacia GAWK Algunos sistemas mantiene de forma independiente todas las versiones del lenguaje: AWK, NAWK y GAWK El sistema operativo Canaima trae la versión AWK redireccionado a NAWK. Canaima no trae de forma nativa GAWK Para instalar GAWK en Canaima: sudo apt-get install gawk Para instalar GAWK en Windows: (Google) GAWK for Widows
  • 5. 508/03/15 Ing. David Barreto Llano (david-barreto.com) ¿Cómo determinar la versión de AWK? $> man awk
  • 6. 608/03/15 Ing. David Barreto Llano (david-barreto.com) Estructura Básica Un programa AWK consta de un conjunto de reglas, que buscan patrones sobre los archivos de entrada y ejecuta acciones si encuentra una coincidencia $1 == "abc" || $2 > 30 { suma = $1+$2+5 print(suma) } Patrón Regla Acción
  • 7. 708/03/15 Ing. David Barreto Llano (david-barreto.com) Estructura Básica Los campos de cada entrada se acceden usando números precedidos por el símbolo de dólar $1 = Accede al primer campo de la entrada $2 = Accede al segundo campo de la entrada $N = Accede al enésimo campo de la entrada (N={1,2,3,..}) $0 = Accede a toda la entrada Si se trata de acceder a un campo inexistente AWK retorna un string vacío
  • 8. 808/03/15 Ing. David Barreto Llano (david-barreto.com) Estructura Básica Existen reglas especiales que se ejecutan una sola vez al inicio (BEGIN) y al final (END) Si se omite el patrón de una regla, la acción se ejecuta siempre para todas las entradas Si se omite la acción, no se realiza ninguna operación Las reglas se ejecutan en el mismo orden en que son definidas
  • 9. 908/03/15 Ing. David Barreto Llano (david-barreto.com) Estructura Básica Los campos de cada entrada se acceden usando números precedidos por el símbolo de dólar $1 = Accede al primer campo de la entrada $2 = Accede al segundo campo de la entrada $N = Accede al enésimo campo de la entrada (N={1,2,3,..}) $0 = Accede a toda la entrada Si se trata de acceder a un campo inexistente AWK retorna un string vacío
  • 10. 1008/03/15 Ing. David Barreto Llano (david-barreto.com) Ejemplos de Uso $2 == "Oriente" { print($1) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente Albany $2 == "Caracas" { print($1) } $1 == "Gabriela" { print($2) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente David Occidente BEGIN { print("Inicio") } { print($2) } END { print("Fin") } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente Inicio Caracas Occidente Centro Oriente Fin
  • 11. 1108/03/15 Ing. David Barreto Llano (david-barreto.com) Ejecutar BEGIN Leer próxima entrada Validar el patrón en la entrada ¿Hay coincidencia? ¿Fin del archivo? Ejecutar END Ejecutar acción Algoritmo de ejecución de AWK (resumen) NO NO SI SI
  • 12. 1208/03/15 Ing. David Barreto Llano (david-barreto.com) Formas de Ejecutar de AWK Desde la línea de comandos gawk '{ print($1) }' optimizacion_v2.txt Desde la linea de comandos usado como parte de un “pipe” del shell cat optimizacion_v2.txt | gawk '{ print($1) }' Desde un archivo gawk -f procesador.awk optimizacion_v2.txt gawk -f procesador.awk optimizacion_v2.txt > resultado.txt
  • 13. 1308/03/15 Ing. David Barreto Llano (david-barreto.com) David Barreto, (0416) 629-0508, Caracas David Mercado, (0416) 613-4416, Oriente Jerald Almeida, (0212) 705-7456, Caracas Víctor Prieto, (0426) 896-7706, Centro optimizacion_v1.txt procesador.awk { print($1) } { print($1, $4) } BEGIN { FS = "," } { print($1, $3) } BEGIN { FS = "," OFS = ";" } { print($1, $3) } BEGIN { FS = "," OFS = ";" } $3 == "Caracas" { print($1, $3) } BEGIN { FS = "," OFS = ";" } $3 == " Caracas" { print($1, $3) } BEGIN { FS = ", " OFS = ";" } $3 == "Caracas" { print($1, $3) } BEGIN { FS = ", " OFS = ";" } $1 ~ /David/ { print("David de " $3) } gawk -f procesador.awk optimizacion_v1.txt ¿Qué resultado genera cada uno de estas variantes del archivo "procesador.awk"?
  • 14. 1408/03/15 Ing. David Barreto Llano (david-barreto.com) Comentarios en el Código Los comentarios son líneas de texto dentro del código que son ignoradas por el interpretador Funcionan como referencias documentales para el programador En AWK los comentarios se inician con el símbolo "#" No existe un símbolo de comentario multilínea # Compara el campo 1 con el valor 5 # e indica si hay match $1 == 5 { print("match!") # Texto de referencia }
  • 15. 1508/03/15 Ing. David Barreto Llano (david-barreto.com) Función interna del lenguaje "print" Imprime resultados en la consola o en un archivo de salida e inserta un salto de línea (n) al final { print($1) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente David Gabriela Jonathan Albany{ print $1 } { print($1, $2) } { print("Hola " $1) } Hola David Hola Gabriela Hola Jonathan Hola Albany David Caracas Gabriela Occidente Jonathan Centro Albany Oriente optimizacion_v2.txt
  • 16. 1608/03/15 Ing. David Barreto Llano (david-barreto.com) Estructuras de control Estructura if-else Estructura for if(power > 15) { print("BTS de alta potencia") } else { print("BTS de baja potencia") } for(i=0; i<5; i++) { print(i) }
  • 17. 1708/03/15 Ing. David Barreto Llano (david-barreto.com) Arreglos AWK tiene un manejo muy básico de los arreglos En AWK todos los arreglos son asociativos No hay forma de inicializar un arreglo con valores celdas[88] = "Catia" celdas[140] = "Altamira" celdas["23"] = "San Martín" celdas["Modcell"] = 1 #Esto no es válido... frutas = ["fresa", "mora", "piña"] #Esto si es válido... frutas[0] = "fresa" frutas[1] = "mora" frutas[2] = "piña"
  • 18. 1808/03/15 Ing. David Barreto Llano (david-barreto.com) Arreglos Operaciones básicas Buscar un índice dentro de un arreglo #Asignación de valores a un arreglo capitales["Venezuela"] = "Caracas" capitales["Colombia"] = "Bogotá" #Lectura de valores de un arreglo print(capitales["Venezuela"]) #Eliminación de valores de un arreglo delete capitales["Venezuela"] if("Colombia" in capitales) { print("Colombia es un índice del arreglo") } else { print("Colombia no es un índice del arreglo") }
  • 19. 1908/03/15 Ing. David Barreto Llano (david-barreto.com) Arreglos Recorrer todos los elementos de un arreglo Buscar un valor dentro de un arreglo for(i in capitales) { print(capitales[i]) } found = 0 for(capital in capitales) { if(capitales[capital] == "Caracas") { found = 1 break } } if(found) { print("Caracas es un valor del arreglo") }
  • 20. 2008/03/15 Ing. David Barreto Llano (david-barreto.com) Arreglos: Consideraciones Especiales Para emular una inicialización de un arreglo en una sola línea, se debe hacer uso de la función split Cuando se hace referencia a un elemento del arreglo que no existe, AWK automáticamente le asigna el valor del string vacío split("fresa mora piña", frutas, " ") capitales["Venezuela"] = "Caracas" capitales["Colombia"] = "Bogotá" #En otros lenguajes esto daría un error cap_ecuador = capitales["Ecuador"] #cap_ecuador == ""
  • 21. 2108/03/15 Ing. David Barreto Llano (david-barreto.com) Función interna del lenguaje "printf" Similar a print pero permite un mayor control del formato No inserta de forma automática un salto de línea al final David Caracas Gabriela Occidente Jonathan Centro Albany Oriente { printf("%s pertenece a %sn", $1, $2) } David pertenece a Caracas Gabriela pertenece a Occidente Jonathan pertenece a Centro Albany pertenece a Oriente
  • 22. 2208/03/15 Ing. David Barreto Llano (david-barreto.com) Letras de control de formato %i, %d: Imprime números enteros (integers) %s: Imprime cadenas de texto (strings) %f: Imprime valores de punto flotante (floats) awk 'BEGIN{printf("%i %s tienen %f bolívaresn",5,"personas",2500)}' 5 personas tienen 2500.000000 bolívares
  • 23. 2308/03/15 Ing. David Barreto Llano (david-barreto.com) Modificadores del formato Posición (N$): Permite usar variables por posición Precisión (.N): Indica la cantidad de decimales para imprimir gawk 'BEGIN{printf("%1$s: CELL %1$s; SECTOR %2$in", "00981", 2)}' 00981: CELL 00981; SECTOR 2 gawk 'BEGIN{printf("En la cuenta hay %.2f bolívaresn", 7800)}' En la cuenta hay 7800.00 bolívares
  • 24. 2408/03/15 Ing. David Barreto Llano (david-barreto.com) Redireccionamiento de la Salida Por default, la salida de AWK (print, printf) va directamente a la consola El redireccionamiento de la salida se puede definir desde el comando de invocación o dentro del propio código awk 'BEGIN{print("hola")}' > salida.txt BEGIN { print("hola") > "salida.txt" }
  • 25. 2508/03/15 Ing. David Barreto Llano (david-barreto.com) Redireccionamiento de la Salida Dentro del código, existen dos formas de redireccionamiento: borrar y agregar (>) o solo agregar (>>) #Si salida.txt no existe, AWK lo crea automáticamente BEGIN { print("hola") > "salida.txt" #Borra el contenido primero print("chao") > "salida.txt" #Agrega la información } #Si salida.txt no existe, AWK lo crea automáticamente BEGIN { print("hola") >> "salida.txt" #Agrega la información print("chao") >> "salida.txt" #Agrega la información }
  • 26. 2608/03/15 Ing. David Barreto Llano (david-barreto.com) Variables Predefinidas FS (Field Separator): Separador de campo de entrada OFS (Output Field Separator): Separador de campo de salida RS (Record Separator): Separador de fila de entrada ORS (Output Record Separator): Separador de fila de salida NF (Number of Fields): Cantidad de campos de la fila actual NR (Number of Records): Cantidad de filas del archivo FNR (actual Record Number): Número de la fila actual
  • 27. 2708/03/15 Ing. David Barreto Llano (david-barreto.com) FS: Separador de Campo de Entrada Define el caracter o conjunto de caracteres que serán usados para la separación de los campos de una "entrada" BEGIN { FS = ";" } { print($2) } David; Caracas Gabriela; Occidente Jonathan; Centro Albany; Oriente Caracas Occidente Centro Oriente BEGIN { FS = "..." } { print($2) } David...Caracas Gabriela...Occidente Jonathan...Centro Albany...Oriente Caracas Occidente Centro Oriente optimizacion_v2.txt
  • 28. 2808/03/15 Ing. David Barreto Llano (david-barreto.com) FS: Separador de Campo de Entrada Su valor por defecto es el caracter vacío (" "). Este es un caso especial que incluye cualquier cantidad de espacios consecutivos o tabulaciones (t) Ignora los espacios en blanco al inicio o al final de la entrada { print($2) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente Caracas Occidente Centro Oriente { print($2) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente Caracas Occidente Centro Oriente
  • 29. 2908/03/15 Ing. David Barreto Llano (david-barreto.com) FS: Separador de Campo de Entrada El separador de campo puede ser definido como una expresión regular BEGIN { FS = "--[abcd]--" } { print($2) } David--a--Caracas Gabriela--b--Occidente Jonathan--c--Centro Albany--d--Oriente Caracas Occidente Centro Oriente BEGIN { FS = "(=)+" } { print($2) } David======Caracas Gabriela===Occidente Jonathan===Centro Albany=====Oriente Caracas Occidente Centro Oriente
  • 30. 3008/03/15 Ing. David Barreto Llano (david-barreto.com) FS: Separador de Campo de Entrada Si se usa el string vacío ("") como separador de campo, cada caracter de la entrada se convierte en un campo independiente BEGIN { FS = "" } { print($2) } David; Caracas Gabriela; Occidente Jonathan; Centro Albany; Oriente a a o l
  • 31. 3108/03/15 Ing. David Barreto Llano (david-barreto.com) OFS: Separador de Campo de Salida Define el o los caracteres de separación de los campos, al momento de "imprimir" resultados en la consola o en un archivo de texto BEGIN { FS = "--" OFS = "; " } { print($1, $2) } David--Caracas Gabriela--Occidente Jonathan--Centro Albany --Oriente David; Caracas Gabriela; Occidente Jonathan; Centro Albany; Oriente BEGIN { FS = "--" OFS = "; " } { $1 = $1 print($0) } David--Caracas Gabriela--Occidente Jonathan--Centro Albany --Oriente David; Caracas Gabriela; Occidente Jonathan; Centro Albany; Oriente
  • 32. 3208/03/15 Ing. David Barreto Llano (david-barreto.com) NF: Número de campos de la entrada El campo NF es una variable propia del lenguaje que nos informa cuantos campos hay por entrada Se define automáticamente para cada entrada procesada Es usado para acceder al último (penúltimo, antepenúltimo, etc.) elemento de una entrada { print(NF) } a b c d x y 3 2 5 4 2 3 { print($NF) } a b c d x y 3 2 5 d y 5 { print($(NF-1)) } a b c d x y 3 2 5 c x 2 random_v1.txt
  • 33. 3308/03/15 Ing. David Barreto Llano (david-barreto.com) El Campo $0: Impresión con separador Cuando se imprime el campo $0, se imprime la entrada completa igual a como aparece en la fuente Para imprimir la entrada con el nuevo caracter se separación (OFS), se debe primero realizar una asignación "dummy" BEGIN { OFS = ", " } { print($0) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente David Caracas Gabriela Occidente Jonathan Centro Albany Oriente BEGIN { OFS = ", " } { $1 = $1 print($0) } David Caracas Gabriela Occidente Jonathan Centro Albany Oriente David, Caracas Gabriela, Occidente Jonathan, Centro Albany, Oriente
  • 34. 3408/03/15 Ing. David Barreto Llano (david-barreto.com) Valores Booleanos AWK no implementa las constantes True o False como la mayoría de los lenguajes para definir valores booleanos En su lugar, AWK toma el valor 0 y el string vacío como False y cualquier otro valor como True Las expresiones lógicas en AWK retornan 1 (True) ó 0 (False) if(5 == 5) # 1 (True) if("Juan") # 1 (True) if(34567) # 1 (True) if(0) # 0 (False) if("") # 0 (False)
  • 35. 3508/03/15 Ing. David Barreto Llano (david-barreto.com) Operadores Lógicos Operador AND: Ambas condiciones deben cumplirse Operador OR: Al menos una condición debe cumplirse Operador NOT: Negación de la expresión (5 >= 3) && (4 < 6) (5 >= 6) && (4 < 6) (5 >= 3) || (4 == 3) (5 >= 5) || (4 <= 5) !(3 == 3) || !(2 > 1) !((3 > 4) && (5 == 3)) # 1 (True) # 0 (False) # 1 (True) # 1 (True) # 0 (False) # 1 (True)
  • 36. 3608/03/15 Ing. David Barreto Llano (david-barreto.com) Patrones Combinados Bolígrafo 30 64.99 Lápiz 80 15.50 Borrador 0 8.75 Libro 0 350.00 Cuaderno 12 199.99 Libreta 19 235.00 $1 ~ /^L/ && $3 > 30 { print($0) } $1 == "Lápiz" || $1 == "Borrador" { print($0) } $3 >= 30 && $3 <= 100 { print($0) } ($1 ~ /[Bb]/ && $2 > 0) || $3 <= 20 { print($0) } inventario.txt
  • 37. 3708/03/15 Ing. David Barreto Llano (david-barreto.com) Expresiones Regulares Una expresión regular es un conjunto de símbolos que permiten realizar una búsqueda por patrones de texto Las expresiones regulares usualmente están demarcadas entre símbolos de slash (/) /uan/ El operador de coincidencia es el símbolo ~ $1 ~ /uan/ { … } Se puede aplicar el operador de negación sobre el operador de coincidencia !~ $1 !~ /uan/ { … } AWK permite usar expresiones regulares para definir variables del lenguaje como FS y RS
  • 38. 3808/03/15 Ing. David Barreto Llano (david-barreto.com) Ejemplos de Expresiones Regulares Buscar las palabras que contengan la secuencia "in" Buscar las palabras que empiecen por "L" Liso Lino Pino limón 512 $1 ~ /in/ { print($1) } Lino Pino Liso Lino Pino limón 512 $1 ~ /^L/ { print($1) } Liso Lino random_v2.txt
  • 39. 3908/03/15 Ing. David Barreto Llano (david-barreto.com) Ejemplos de Expresiones Regulares Buscar las palabras que empiecen por "L" o "l" Buscar las palabras que terminen con "no" Liso Lino Pino limón 512 $1 ~ /^[Ll]/ { print($1) } Liso Lino limón Liso Lino Pino limón 512 $1 ~ /no$/ { print($1) } Lino Pino
  • 40. 4008/03/15 Ing. David Barreto Llano (david-barreto.com) Expresiones Regulares Buscar las "palabras" que consten exclusivamente de números Buscar las palabras contengan una secuencia que inicia con "i", seguida de cualquier letra, seguida de la letra "o" Liso Lino Pino limón 512 $1 ~ /^[0-9]$/ { print($1) } 512 Liso Lino Pino limón 512 $1 ~ /i.o/ { print($1) } Liso Lino Pino
  • 41. 4108/03/15 Ing. David Barreto Llano (david-barreto.com) Expresiones Regulares Buscar las "palabras" que contengan una secuencia que inicie con 1 y tenga al menos un 8 a continuación Buscar las "palabras" que contengan una secuencia que inicie con 1 y tenga cero, uno o varios 8 a continuación 189 21889 2198 8888 1982 $1 ~ /1(8)+/ { print($1) } 189 21889 189 21889 2198 8888 1982 $1 ~ /1(8)*/ { print($1) } 189 21889 2198 1982
  • 42. 4208/03/15 Ing. David Barreto Llano (david-barreto.com) Expresiones Regulares Buscar las "palabras" que contengan una secuencia que inicie con 1 y tenga al menos dos 8 a continuación Buscar las "palabras" que contengan una secuencia que tenga entre 2 y 4 números ocho consecutivos 189 21889 2198 8888 1982 $1 ~ /1(8){2,}/ { print($1) } 21889 189 21889 2198 8888 1982 $1 ~ /(8){2,4}/ { print($1) } 21889 8888
  • 43. 4308/03/15 Ing. David Barreto Llano (david-barreto.com) Funciones Las funciones son bloques de código reutilizables function comando_btseqp(bts, potencia) { printf("BTS: %s - Power: %0.f", bts, potencia) } $2 == 507 { comando_btseqp($1, $3) }
  • 44. 4408/03/15 Ing. David Barreto Llano (david-barreto.com) Funciones Las funciones en AWK pueden definirse en cualquier parte del código fuente Si se invoca una función sin definir uno o más parámetros, estos adquieren automáticamente el valor del string vacío Dentro de una función no es posible definir variables locales. Para ello, se definene parámetros para los cuales nunca se le asignan argumentos function comando(bts, potencia, i) { i = 3 printf("%i) BTS: %s - Power: %0.f", i, bts, potencia) } 2 == 507 { i = 2 comando_btseqp($1, $3) print(i) }