私は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
これら2つのファイルから目的のデータをどのように取得できますか?
答え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
編集:速度を上げ、同じ行で複数回発生する回数を数えます。