3

У меня есть список слов, как это, разделенных строкой:

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

И у меня есть несколько файлов в каталоге:

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

Как я могу посчитать вхождения слов в этих файлах? Вывод должен быть таким:

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
...

2 ответа2

5

Предполагая, что ваш список слов находится в файле с именем /path/to/words.txt и ваше дерево находится в /tree для целей этого примера, попробуйте:

find /tree -name '*.txt' -execdir sed 's/ /\
/g' {} + | grep -Fw -f /path/to/words.txt | sort | uniq -c | \
awk '{print $2 ": " $1}'
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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .