나는 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
편집: 속도를 높이고 같은 줄에서 여러 번 발생하는 횟수를 계산합니다.