martes, 28 de febrero de 2012

Sed

 Sed es un editor de emisiones (stream editor) utilizado para el procesamiento  de texto en archivos. Utiliza un lenguaje de programación para realizar transformaciones en una emisión de datos leyendo línea por línea de estos. Fue desarrollado entre 1973 y 1974 por Lee E. McMahon de Bell Labs. Está incluido en las instalaciones básicas de prácticamente todas las distribuciones de GNU/Linux.

 Algunas referencias:

http://sed.sourceforge.net/sedfaq.html
http://www.gentoo.org/doc/es/articles/l-sed1.xml

Ejemplos de usos de Sed:
#!/bin/bash

for M in "60" "80"
do 
    
#Borrar hasta antes de la ocurrencia "Tiempo"
    sed '/^Tiempo/,$!d' salida_$M.out
    
#Borrar el bloque de lineas entre ocurrencias 
    sed '/^Tried/,/^Total/d' salida_$M.out
    
#Borrar desde la 5ta linea hasta la ocurrencia "Total"
    sed -i '5,/^Total/d' salida_$M.out 
    
#Uso de -i para modificar archivo original y respaldarlo
    sed -i".dat" -e '/^Tried/,/^Total/d' salida_$M.out
    
#borrar lineas en blanco
    sed '/^$/d' salida_$M.out
    
#Hacer que solamente exista una línea en blanco después de cada frase
    sed '/^$/d;G' salida_$M.out 
    
#Añadir una línea en blanco después de cada frase
    sed G salida_$M.out
    
#Insertar una línea en blanco antes de cada línea que cumpla con una ocurrencia
    sed -i '/fallo/{x;p;x}' salida_$M.out
    sed -i '/se/{x;p;x}' salida_$M.out
    
#Insertar una línea en blanco antes y después de cada línea que cumpla con una ocurrencia
    sed '/Inicio/G' salida_$M.out
    
# leer y remplazar
    echo "texto a rempl"; read remplazar
    echo "por "; read por
    sed "s_"$remplazar"_"$por"_g" < salida_$M.out
    
#Cambiar minsuculas por maysculas la primera letra de una linea
    sed -i 's/^./\u&/' salida_$M.out
    
#Insertar linea de texto antes(i), despues(a) y en la linea(c) 
    sed -i "10a\seg" salida_$M.out 
    
done

martes, 14 de febrero de 2012

Tarea 2: AWK

Para acceder a los códigos fuente de esta tarea dar click aquí
Tarea2
View more presentations from melizondo_amaya.

#!/usr/bin/awk -f 
BEGIN {
    nodos=0;
    coordx=201.348998;
    coordy=63.024305;
    nodoi=17;
    nodoj=42;
    radio=100;
    minD=1000000;
    maxD=0;
    minimoD="";
    maximoD="";
    for(k=0; k<3 ;k++){
    suma[k]=0;
    min[k]=1000000;
    max[k]=0;
    minimo[k]="";
    maximo[k]=""
    }
    cIN=0;
    for(k=0; k<60; k++){
    grado[k]=0;
    }
    adyacentes=0;
}

{
    if(NR==1){
    nodos=$0
    }
   
    if(NR>1 && NR<=(nodos+1)){
   
#Array de nodos cuya distancia al pundo tado es menor al
#radio de cobertura
   
    D=sqrt(((coordx-$2)^2+(coordy-$3)^2))
    if(D<=radio){
        nodosIN[cIN]=$1
        cIN++
    }

#Suma de actividades nodales y obtencion de minimos y maximos

    for(k=0; k<3; k++){       
        suma[k]=$(k+4)
       
        if (min[k]>=$(k+4)){
        min[k]=$(k+4)
        minimo[k]=$1
        }
        else if (max[k]<=$(k+4)){
        max[k]=$(k+4)
        maximo[k]=$1
        }
    }
    }
    for(k=0; k<3; k++){       
    promedio[k]=suma[k]/nodos;
    }

#busca adyacencias

    if (NR==(nodos+2))
    adyacencias=$0

    if (NR>(nodos+2) && NR<(nodos+2+adyacencias)){
    grado[$1]++
    grado[$2]++   
    if(($1==nodoi && $2==nodoj) || ($1==nodoj && $2==nodoi))
        adyacentes=1;
    }
   
}
END{   
    print "\n Cantidad de nodos= " nodos "\n"
    print " Nodos dentro de un radio de cobertura r= " radio
    print " para el punto (" coordx "," coordy ") :"
    for (k=0;k<cIN;k++){
    print nodosIN[k]
    } 
    print "\n Minimos y maximos para actividades nodales: \n"
    for (k=0;k<3;k++){
    print "\n Actividad " k+1 " : \n El promedio es: " promedio[k] "
    print " El minimo es el nodo " minimo[k] " con " min[k]
    print " El maximo es el nodo " maximo[k] " con " max[k]   
    }
    print "\n En total hay " adyacencias " adyacencias"
    print " El grado de cada nodo es el siguiente: \n"
    for(k=0; k<nodos;k++){
    print "Nodo " k+1 ": grado " grado[k]
    }
    if(adyacentes==0)
    print "Los nodos proporcionados " nodoi " y " nodoj " NO son adyacentes"
    else
    print "Los nodos proporcionados " nodoi " y " nodoj " SI son adyacentes"
}

miércoles, 8 de febrero de 2012

AWK

AWK es un lenguaje de programación de propósito general diseñado para procesar archivos de texto y flujos de datos. El nombre AWK deriva de los apellidos de los autores: Alfred V. Aho, Peter J. Weinberger y Brian W. Kernighan. La sintaxis es muy semejante a la del lenguaje C, con la particularidad de que, al ser awk un intérprete, no es necesario pasar por procesos de compilación y linkedición. Con AWK se pueden generar reportes, validar datos, producir índices, extraer fragmentos de datos para procesamiento, ordenar datos, etc. La implementación de awk para GNU se conoce como gawk

Un archivo se compone de registros, que por defecto son las líneas del archivo. Una línea se convierte en un registro. AWK opera en un registro a la vez. Un registro se compone de los campos, que por defecto están separados por cualquier número de espacios o tabuladores. 

La función básica de AWK se centra entonces en la selección de registros de un archivo en función de uno o varios patrones. Cuando un registro concuerda con uno de los patrones, AWK aplica las acciones especificadas a esa línea. Si solamente resultara relevante una parte del registro seleccionado, también sería posible separarla e ignorar el resto.

Para mayor información sobre AWK, dejo aquí algunas referencias:

Tarjetas de referencia de interés:
AWK