문자열이 여러 파일에 나타납니다.

문자열이 여러 파일에 나타납니다.

파일이 두 개 있어요

  1. 입력.txt
  2. 키워드.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

그것은 이루어져야합니다.

에서는 코드에서 1에 대해 개별적으로 수행한 것처럼 각 키워드를 열고 반복하면서 차례로 greping perl해야 합니다 .keyword.txt

답변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

관련 정보