Vorkommen einer Zeichenfolge in mehreren Dateien

Vorkommen einer Zeichenfolge in mehreren Dateien

Ich habe zwei Dateien

  1. Eingabe.txt
  2. schlüsselwort.txt

input.txthat 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.txthat Inhalte wie:

MOV
BRA.l
RETI
ADD
SUB
..
etc

Jetzt möchte ich diese keyword.txtDatei lesen und in input.txtder Datei danach suchen und herausfinden, wie oft MOVsie vorgekommen BRA.list.

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 MOVund nicht nach anderen Anweisungen wie suchen RETI.

Außerdem möchte ich MOV,RETIusw. in eine keyword.txtDatei 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 perleine einfache Befehlszeile benötigen,

 grep -f keyword.txt -c input.txt

Sollte es tun.

In perlmüssten Sie auch „open“ ausführen keyword.txtund 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

verwandte Informationen