The simplest approach would be to `grep` each of the patterns and then count them:
$ grep -Fwf file1 file2 | sort | uniq -c
3 Fatty_acid_degradation
The `grep` options are `-f` to give a file as a list of patterns to search for, `-F` to specify that the pattern should be treated as a string and not a regular expression and `-w` to ensure that the pattern is matched only against entire words (so that `regulation_of_expression` is not matched against `upregulation_of_excpression` for example).
Then, you can use whatever tool you prefer to change the format:
$ grep -Fwf file1 file2 | sort | uniq -c | sed -r 's/.*([0-9]+) *(.*)/\2\t\1/'
$ grep -Fwf file1 file2 | sort | uniq -c | perl -lane 'print "$F[1]\t$F[0]"'
$ grep -Fwf file1 file2 | sort | uniq -c | awk -vOFS="\t" '{print $2,$1}'
All of the above return
Fatty_acid_degradation 3