在 file1 中查找字符串,计算 file2 中出现的次数

在 file1 中查找字符串,计算 file2 中出现的次数

我有file1.txt字符串值,例如

New Drug Application
Drug Product
Dosing instructions

我需要计算这些字符串与数据一起出现的频率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

编辑:用于加速和计算同一行上的多次出现

相关内容