我有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
编辑:用于加速和计算同一行上的多次出现