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.