2017-01-11 4 views
1

に表示されますこのような何かの回数を数える:別のファイルにリストされているパターンをは、ファイル内の各パターンは、私はファイル(test.txtという)をスキャンしようとしている別のファイル

make 
bake 
baker 
makes 
take 
cook 
sbake 

を( ref.txt):

ake 
make 
bake 
look 

私はそうのようにgrepをしてルーピング試してみました:

しかし、それは部分一致はカウントされませんO NLY、正確な一致(または部分的な一致を数えるにおける一貫性のない)とI出力:任意の助け

4 
1 
2 
0 

代わりの

6 
2 
3 
0 

ありがとう!

+1

申し訳ありません、上記の編集が今すぐ正しくなる必要があります – Ash

+1

私はこれを再現できません。私には正しく返されます6 2 3 0 – fedorqui

+0

同じですが、 'grep(GNU grep)2.26'に再現できません。 – Inian

答えて

0
$ while read -r line; do grep -c $line test.txt ; done < ref.txt 
6 
2 
3 
0 
1

why-is-using-a-shell-loop-to-process-text-considered-bad-practice(シェルループでこれを行わない理由の一部を除いてすべてを示すわけではありません)を参照してください。

テキストを操作するための標準的なUNIXツールはawkのである:

$ awk 'NR==FNR{cnt[$0]=0;next} {for (re in cnt) cnt[re]+=gsub(re,"&")} END{for (re in cnt) print re, cnt[re]}' ref.txt test.txt 
ake 6 
bake 3 
look 0 
make 2 

上記は、あなたのref.txtファイル内のテキストは、任意の正規表現のメタ文字が含まれていないか、それがないならば、正規表現の一致が望ましい前提としています。正規表現の代わりに文字列が必要な場合は、わずかに異なる解決策が必要です。

関連する問題