tengo dos archivos
- entrada.txt
- palabra clave.txt
input.txt
tiene contenidos como:
.src_ref 0 "call.s" 24 first
0x000000 0x5a80 0x0060 BRA.l 0x60
.src_ref 0 "call.s" 30 first
0x000002 0x1bc5 RETI
.src_ref 0 "call.s" 31 first
0x000003 0x6840 MOV R0L,R0L
.src_ref 0 "call.s" 35 first
0x000004 0x1bc5 RETI
keyword.txt
tiene contenidos como:
MOV
BRA.l
RETI
ADD
SUB
..
etc
Ahora quiero leer este keyword.txt
archivo y buscarlo en input.txt
el archivo y encontrar cuántas veces MOV
ha ocurrido y cuántas veces BRA.l
ha ocurrido.
Hasta ahora he logrado que funcione desde un solo archivo. aquí está el código
#!/usr/bin/perl
use strict;
use warnings;
sub retriver();
my @lines;
my $lines_ref;
my $count;
$lines_ref=retriver();
@lines=@$lines_ref;
$count=@lines;
print "Count :$count\nLines\n";
print join "\n",@lines;
sub retriver()
{
my $file='C:\Users\vk41286\Desktop\input.txt';
open FILE, $file or die "FILE $file NOT FOUND - $!\n";
my @contents=<FILE>;
my @filtered=grep(/MOV R0L,R0L/,@contents);
return \@filtered;
}
Aquí solo puedo buscar MOV
y no puedo buscar otras instrucciones como RETI
.
También quiero poner MOV,RETI
etc. en un keyword.txt
archivo y hacerlo genérico.
LA SALIDA debe ser:
MOV has occured 2 times
RETI has occured 1 time
Respuesta1
Si no está en apuros perl
, una simple línea de comando
grep -f keyword.txt -c input.txt
Deberías hacerlo.
En perl
, también deberá abrir keyword.txt
y recorrer cada palabra clave, buscando por turno como lo hizo solo con 1 en su código.
Respuesta2
Parece que bash
-script es mucho más simple que perl
:
while read keyword
do
occurrence =$(grep -c -F "$keyword" input.txt)
echo "$keyword has occurred $occurrence time(s)"
done < keyword.txt