У меня есть два файла
- ввод.txt
- ключевое слово.txt
input.txt
имеет такое содержание:
.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
имеет такое содержание:
MOV
BRA.l
RETI
ADD
SUB
..
etc
Теперь я хочу прочитать этот keyword.txt
файл, выполнить поиск по нему input.txt
и узнать, сколько раз MOV
это произошло BRA.l
.
Пока что мне удалось заставить это работать из одного файла. Вот код
#!/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;
}
Здесь я могу искать только MOV
по таким инструкциям, как RETI
.
Также я хочу поместить MOV,RETI
и т. д. в keyword.txt
файл и сделать его универсальным.
ВЫХОД должен быть:
MOV has occured 2 times
RETI has occured 1 time
решение1
Если у вас нет проблем perl
, простая командная строка
grep -f keyword.txt -c input.txt
следует это сделать.
В perl
, вам также нужно будет сделать открытие keyword.txt
и цикл по каждому ключевому слову, выполняя grep по очереди, как вы делали для одного ключевого слова в вашем коде.
решение2
Кажется, что bash
-script намного проще, чем perl
:
while read keyword
do
occurrence =$(grep -c -F "$keyword" input.txt)
echo "$keyword has occurred $occurrence time(s)"
done < keyword.txt