Ayuda con un script... Leer cadena, buscar una letra y realizar accion

Buenas, tengo un prolemilla con un script, el caso es que tengo una cadena de texto, de la cual hay un caracter, una "H" concretamente, que tengo que buscar si esta o no esta, si no esta es "-", en caso de que este, tengo que mirar la URL y comprobar que esa URL exite en un fichero, si exite en ese fichero, sacarla de ese fichero y meterla en otro.

Un ejemplo de la cadena, si os fijais en el codigo, figura una "H" donde esta tanto guion... "---- AMH-", esa es la letra que tengo que comprobar si existe o no, si esta ver al final de la cadena la URL que figura con un GET
Wed Sep  9 14:00:01 2015 v6u2 p8737    211 ->      0      0/001   000.000.000.000:
55104(00000:00000):008 =>  000.000.000.000:00080(08080):000      0ms      0ms(r)
    0ms(O)      0ms(D)      0ms(L)      1:0ms(R)      0ms(U)      0ms(S)      0m
s(C)      0ms(N)      0ms(A)      0ms(s)      0ms(c)         100 ->         140
-40%           0       NEG_HIT/204 ---------------------- AMH-E----1---N------
n--------k1----M-AHSH-SH-O---L- | -/00000000 | - | - | - | LLLL | - |
              - | 09361569421 | SESSION-646258C1-8 | - | Dalvik/1.6.0 (Linux; U;
Android 4.4.4; XT1039 Build/KXB21.14-L1.56) | Android generic#1 | Android-Web |
0:0 | - | - | 0000000000000000 | 237864823746823764 | - |       GET http://www.google.com


Tengo un lio que no se por donde empezar...

Saludos y gracias chic@s
Esa "H" va siempre como "AMH-"?
Si es asi un cat para leer el archivo y un grep para sacar la linea que contenga esa cadena,algo así:
cat archivo.txt | grep AMH
Esog Enaug escribió:Esa "H" va siempre como "AMH-"?
Si es asi un cat para leer el archivo y un grep para sacar la linea que contenga esa cadena,algo así:
cat archivo.txt | grep AMH

Buenas, si y no... vamos no siempre.
Estoy jugando con "cut" y consigo sacar el "AMH" como campo y dentro de el buscar la "H"
cat prueba.txt | cut -d "|" -f 1 | cut -d "-" -f 26 | grep -o "H"


[mamaaaaa]
Ya tengo el script, al final había mas chicha de lo que se pensó inicialmente... hay lo dejo por si alguien lo necesita. [ginyo]

#!/usr/bin/perl -w
use strict;
use warnings;

# Variables de configuracion
#####################################################
my $PWD='/home/AzagraMac/Developer/proyects/';
my $PATH_MASTER_LIST= $PWD . 'MasterList.csv';

#my $PATH_MASTER_NEWLIST= $PWD . 'MasterNewList.csv';
my $PATH_MASTER_LIST_LOG= $PWD . 'MasterListLog.log';
my $PATH_LOG= $PWD . 'salida.log';
my $PATH_SYSLOG= $PWD . 'syslog.log';
#####################################################

my $line;
my @MasterList;
my @splitline;
my $cadena_aux;
my $url_search;
my $i;
my $timelog;
my $countlines;
#my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
my $aux;

# Abrimos el fichero de la MasterList
open(FMASTER, "<", $PATH_MASTER_LIST) or die "No se puede abrir la Master List $!";

# Cargamos la MasterList en un array
foreach $line (<FMASTER>)  {
    @splitline = split(/,/, $line);
    $aux = $splitline[0];
    chop($aux);
    push(@MasterList, $aux);
}
close (FMASTER);

# print $MasterList[4] . "\n";

open(SYSLOG, ">>", $PATH_SYSLOG ) or die "No se puede abrir el fichero del sistema de log $!";

&WriteLog("Iniciando ejecucion");

# Abrimos para añadir al fichero de log de la MasterList
open(MLOG, ">>", $PATH_MASTER_LIST_LOG ) or die "No se puede abrir el log de la MasterList $!";
# Abrimos el fichero de las trazas
open(FLOG, "<", $PATH_LOG ) or die "No se puede abrir el log de las trazas $!";

&WriteLog("Fichero Log abierto");
$countlines=0;

# Buscamos el Flag H en las trazas
foreach $line (<FLOG>){
    @splitline = split(/\|/, $line);
    if (substr($splitline[0],-51,1) eq 'H'){
        $url_search = $splitline[-1];
        # Comprueba si existe un GET
        if ($url_search =~ m/^.* GET .*/) {
            # Elimina los caracteres finales (saltos de linea, retorno de carro...)
            chop ($url_search);
            $i=0;
            foreach $cadena_aux ( @MasterList ){
                if ($url_search =~ /$cadena_aux/) {
                    $timelog = substr($splitline[0], 0,24);
                    print MLOG "$cadena_aux, $timelog, $url_search\n";
                    # Elimina elementos de la array en mitad de la array
                    splice @MasterList, $i, 1;
                    $countlines++;
                    last;
                }
                $i++;
            }
        }
    }
   
}

&WriteLog("Cerrar fichero $PATH_LOG, Lineas borradas: $countlines");

if ($countlines > 0){
    &WriteMasterList($PATH_MASTER_LIST);
}
close (FLOG);
close (MLOG);
close (SYSLOG);

# Escribe la MasterList en memoria en el disco,
# y machaca el fichero original, siempre que sea $PATH_MASTER_LIST
sub WriteMasterList {
    my $result = 0;
    my $values;
    if (open(MNLOG, ">", $_[0])){
       
        foreach $values ( @MasterList ){
            print MNLOG "$values\n";
        }
        $result = 1;
        close (MNLOG);
    }
    return $result;
}

sub WriteLog {
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
    $year += 1900;
    $mon ++;
    print SYSLOG "$mday-$mon-$year $hour:$min:$sec - $_[0]\n";
}







3 respuestas