Ich habe zwei Dateien
- Eingabe.txt
- schlüsselwort.txt
input.txt
hat Inhalte wie:
.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
hat Inhalte wie:
MOV
BRA.l
RETI
ADD
SUB
..
etc
Jetzt möchte ich diese keyword.txt
Datei lesen und in input.txt
der Datei danach suchen und herausfinden, wie oft MOV
sie vorgekommen BRA.l
ist.
Bisher habe ich es geschafft, es mit einer einzigen Datei selbst zum Laufen zu bringen. Hier ist der Code
#!/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;
}
Hier kann ich nur suchen MOV
und nicht nach anderen Anweisungen wie suchen RETI
.
Außerdem möchte ich MOV,RETI
usw. in eine keyword.txt
Datei einfügen und sie generisch machen.
Die Ausgabe sollte sein:
MOV has occured 2 times
RETI has occured 1 time
Antwort1
Wenn Sie nicht dringend perl
eine einfache Befehlszeile benötigen,
grep -f keyword.txt -c input.txt
Sollte es tun.
In perl
müssten Sie auch „open“ ausführen keyword.txt
und jedes Schlüsselwort durchlaufen und nacheinander „greppen“, wie Sie es in Ihrem Code nur für 1 getan haben.
Antwort2
Es scheint, dass bash
-script viel einfacher ist als perl
:
while read keyword
do
occurrence =$(grep -c -F "$keyword" input.txt)
echo "$keyword has occurred $occurrence time(s)"
done < keyword.txt