Conte as ocorrências de uma lista de palavras em arquivos

3

Eu tenho uma lista de palavras como essa, separadas por linha:

Range
Balance
Total
CombinList
CombinRow
GridKey
KeDanJia
AddRowNum
TopList
Keysearch
Keysearchtaobao
IsearchData
IsearchDataSep
...

E eu tenho alguns arquivos em um diretório:

$ tree
.
|-- a.txt
|-- b.txt
|-- c.txt
|-- d
|   |-- a.txt
|   |-- b.txt
|   |-- c.txt
|   |-- d.txt
|   |-- e.txt
|   |-- f.txt
|   '-- g.txt

Como posso contar as ocorrências de palavras nesses arquivos? A saída deve ser como:

Range: 0
Balance: 32
Total: 100
CombinList:4
CombinRow: 3
GridKey: 1
KeDanJia: 43
AddRowNum: 5
TopList: 34
Keysearch: 0
Keysearchtaobao: 1
IsearchData: 12
IsearchDataSep: 123
...
    
por fool 03.08.2011 / 04:21

2 respostas

5

Supondo que sua lista de palavras esteja em um arquivo chamado /path/to/words.txt e sua árvore está localizada em /tree para os propósitos deste exemplo, tente:

find /tree -name '*.txt' -execdir sed 's/ /\
/g' {} + | grep -Fw -f /path/to/words.txt | sort | uniq -c | \
awk '{print $2 ": " $1}'
    
por 03.08.2011 / 04:53
0
awk '
  FILENAME == ARGV[1] {word[$0]=0; next}
  {
    for (i=1; i<=NF; i++) {
      if ($i in word) word[$i]++
    }
  }
  END {for (w in word) print w ": " word[w]}
' word.file $(find . -type f -print)
    
por 03.08.2011 / 14:00

Tags