I'm not sure if this can affect the performance (if you have very larges files I would think this command should be slow):

```sh
grep -Rh '\*' | tr -s ' ' | sort | uniq -c
```

The section `grep -Rh '\*'` means that will match any line which has a `*` at the end of this one. `-R` is recursive (so it will search in all files you have in the current directory) and `-h` suppress printing the filenames whose matches the pattern.<br>
About `tr -s ' '` I'm removing repeated spaces between every line, for example having this:

```
Need *
Word   buzz *
Need *
More   *
More *
Word   *
More   *
More *
Word   *
Word   *
Need *
More *
```
the `tr` command will parse it to:

```
Need *
Word buzz *
Need *
More *
More *
Word *
More *
More *
Word *
Word *
Need *
More *
```

The content above is piped to `sort` to have this output:

```
More *
More *
More *
More *
More *
Need *
Need *
Need *
Word *
Word *
Word *
Word buzz *
```

And finally with `uniq -c` I'm prefixing lines by the number of occurrences of every word which is what you want.<br>

**The sort command is important, if you do not use it, the expected result will be different**

According to the output above, the final output (by using `uniq -c`) will be:

```
5 More *
3 Need *
3 Word *
1 Word buzz *
```

If you want to remove the `*` you can pipe to `sed` to remove the last character or `*`:

```sh
grep -Rh '\*' | tr -s ' ' | sort | uniq -c | sed 's/.$//'
#or
grep -Rh '\*' | tr -s ' ' | sort | uniq -c | sed 's/\*//'
```

I think and hope there are better ways to achieve that, because here I'm using `5` commands to get the desired output. So as I said it may result in slow performance.