2017-01-11 16 views
1

我試圖掃描文件(test.txt的),像這樣:計數的次數每個圖案在一個文件中出現一個單獨的文件

make 
bake 
baker 
makes 
take 
cook 
sbake 

在一個單獨的文件中列出的模式( ref.txt):

ake 
make 
bake 
look 

我曾嘗試使用grep循環,像這樣:

但是,它並不能算部分匹配Ø 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一些,但不是全部的理由不嘗試用一個shell循環來做到這一點。

標準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文件不包含任何正則表達式元字符,或者如果它不那麼正則表達式匹配是可取的。如果可以,但你需要一個字符串而不是正則表達式匹配,你需要一個稍微不同的解決方案。

相關問題