ocorrência de uma string em múltiplos arquivos

0

Eu tenho dois arquivos

  1. input.txt
  2. keyword.txt

input.txt tem conteúdos 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 tem conteúdos como:

MOV
BRA.l
RETI
ADD
SUB
..
etc

Agora, quero ler este arquivo keyword.txt e pesquisá-lo no arquivo input.txt e descobrir quantas vezes MOV ocorreu Quantas vezes BRA.l ocorreu.

Até agora eu consegui trabalhar com um único arquivo. aqui está o 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;
}

Aqui, posso pesquisar apenas MOV e não consigo pesquisar outras instruções, como RETI .

Além disso, quero colocar MOV,RETI etc. em um arquivo keyword.txt e torná-lo genérico.

O OUTPUT deve ser:

MOV has occured 2  times
RETI has occured 1 time
    
por vk41286 19.01.2015 / 18:58

2 respostas

1

Se você não tiver dificuldade em usar perl , uma linha de comando simples

 grep -f keyword.txt -c input.txt

deve fazer isso.

Em perl , você precisaria abrir também keyword.txt e percorrer cada palavra-chave, usando o grepping como você fez para 1 sozinho em seu código.

    
por 19.01.2015 / 19:02
0

Parece que bash -script é muito mais simples que perl :

while read keyword
do
    occurrence =$(grep -c -F "$keyword" input.txt)
    echo "$keyword has occurred $occurrence time(s)"
done < keyword.txt
    
por 19.01.2015 / 19:17

Tags