martes, 13 de marzo de 2012

AWK y SED

Se muestra el uso de dos herramientas nuevas:
1. AWK
2. SED

En ambos casos se crearon programas del tipo BASH para realizar repeticiones de los programas con ambas herramientas.

El objetivo de ambos programas es obtener información de un archivo *.lst generado al resolver un programa de optimización en GAMS, cada uno con su sintaxis respectiva.

El primer archivo se llama ultimo.sh y usa AWK par leeer por columnas la informacion del archivo de entrada (*.lst) y cuando encuentra las coincidencias re-direcciona la infornación hacia diferentes archivos de salida (res_weee_NumNodos_Param_Repetición.txt) El segundo archivo se llama intento_sed.sh y usa

El archivo ultimo.sh que pide el numero de nodos para saber que instancias son las que se realizaran (20 o 40 nodos) cada uno con 10 variantes.

El archivo intento_sed.sh pide el número de nodos para crear el nombre del archivo de entrada (*.lst) y cuando encuentra las coincidencias re-direcciona la información hacia diferentes archivos de salida (obtenido_NumNodos_Param_Repetición)

Se adjuntan ambos programas:

El archivo ultimo.sh


#!/bin/bash
echo "numero de unidades basicas: "
read
v=$REPLY
echo $v
for i in  1 2 3 4 5; do
    if [ $v -eq "20" ]
        then
        for j in 2 3; do
awk 'BEGIN {print "R E S U L T A D O S \n"} $1 == "****" && $3 == "STATUS" {print $2,$3,":",$5,$6,$7} $2 == "OBJECTIVE" {print $2,$3,$4} $1 == "MIP" && $2 == "status" {print $0} $1 == "Best" {print $0, "\nLos GAP absolutos y relativos son:"} $2 ~ /gap:$/ {print $0} END {print "--------------fin----------------"}' $"weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "res_weee_"$v"_"$j"_"$i"_cplex_opt.txt"
        done
    elif [ $v -eq "40" ];
        then
        for j in 3 4; do
awk 'BEGIN {print "R E S U L T A D O S \n"} $1 == "****" && $3 == "STATUS" {print $2,$3,":",$5,$6,$7} $2 == "OBJECTIVE" {print $2,$3,$4} $1 == "MIP" && $2 == "status" {print $0} $1 == "Best" {print $0, "\nLos GAP absolutos y relativos son:"} $2 ~ /gap:$/ {print $0} END {print "--------------fin----------------"}' $"weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "res_weee_"$v"_"$j"_"$i"_cplex_opt.txt"
        done

    else
        echo "Solo hay instancias con 20 y 40 nodos"
        break
    fi
    echo "Finalizado con $v unidades basicas"
done

El formato del archivo de salida es el siguiente:
R E S U L T A D O S
SOLVER STATUS : NORMAL COMPLETION
MODEL STATUS : OPTIMAL
OBJECTIVE VALUE 2.0000
Best possible:           2.000000
Los GAP absolutos y relativos son:
Absolute gap:            0.000000
Relative gap:            0.000000
--------------fin----------------


El archivo intento_sed.sh

#!/bin/bash
echo "numero de unidades basicas: "
read
v=$REPLY
for i in  1 2 3 4 5; do
    if [ $v -eq "20" ];
        then
        for j in 2 3; do
            sed -n -e '/STATUS/p' -e '/gap/p' "weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "obtenido_"$v"_"$j"_"$i
        done
    elif [ $v -eq "40" ];
        then
        for j in 3 4; do
            sed -n -e '/STATUS/p' -e '/gap/p' "weee_"$v"_"$j"_"$i"_cplex_opt.lst" > "obtenido_"$v"_"$j"_"$i
        done
    else
        echo "Solo hay instancias con 20 y 40 nodos"
        break
    fi
    echo "Finalizado con $v unidades basicas"
done

El formato del archivo de salida es el siguiente:
**** SOLVER STATUS     1 NORMAL COMPLETION
**** MODEL STATUS      1 OPTIMAL
>>  epgap  0.0001
Absolute gap:            0.000000
Relative gap:            0.000000

No hay comentarios:

Publicar un comentario