file1에서 문자열을 찾고 file2에서 발생 횟수를 계산합니다.

file1에서 문자열을 찾고 file2에서 발생 횟수를 계산합니다.

나는 file1.txt다음과 같은 문자열 값을 가지고 있습니다.

New Drug Application
Drug Product
Dosing instructions

이 문자열이 data 와 함께 얼마나 자주 나타나는지 계산해야 합니다 file2.txt.

Regulatory New Drug Application for Drug Product after testing of Dosing instructions for all new studies.

내가 사용한 명령은 다음과 같습니다.

foreach string ( `cat terms.txt` )
foreach? echo $string >>out.txt
foreach? grep $string data.txt | wc >>out.txt
end

out.txt공백이 포함된 전체 문자열은 반환 되지 않습니다 . 대신 다음과 같은 데이터를 반환합니다.

The -1
New -2
Application -1
etc.

데이터 파일의 용어에 따옴표와 슬래시를 추가해 보았지만 소용이 없었습니다 egrep. fgrep이 두 파일에서 원하는 데이터를 어떻게 얻을 수 있나요?

답변1

이 시도:

fgrep -of file1.txt file2.txt | sort | uniq -c

이렇게 하면 정확한 문구만 검색됩니다. 간격이 다르면 찾을 수 없습니다.

답변2

어쩌면 IFS(내부 필드 구분 기호)를 사용하고 여기에 $'\n'을 할당할 수 있습니다. 이는 개행만 유효한 구분 기호임을 의미합니다. 또한 콘텐츠에서 동일한 키가 여러 번 발생하는 것을 감지하려면 grep -o 옵션을 사용할 수 있습니다. 샘플 bash 스크립트는 다음과 같습니다.

IFS=$'\n'
for string in `cat key.txt`
do
   $string >> out.txt
   grep -o $string content.txt | wc -l >> out.txt
done

답변3

전체 라인을 grep해야합니다. 이는 다음과 같이 수행할 수 있습니다 -

    x=1
    len=$(wc -l file1.txt | awk '{print $1}')
    while [ $x -le $len ] 
    do
       #pat=$(head -$x  file1.txt | tail -1)  << slow hence changed
       pat=$(sed "${x}q;d" $1)
       #cnt=$(grep -c "$pat" file2.txt) < Edited to count all matches 
       cnt=$(grep -o "$pat" file2.txt| wc -l | awk '{print $1}')
       echo "$pat        $cnt"
       x=$(expr $x + 1)
    done

편집: 속도를 높이고 같은 줄에서 여러 번 발생하는 횟수를 계산합니다.

관련 정보