With GNU awk for ENDFILE and IGNORECASE:
$ awk -v IGNORECASE=1 ' { cnt += ( gsub(/[[:alpha:]]/,"&") - gsub(/[aeiou]/,"&") )} ENDFILE { print FILENAME, cnt+0; cnt=0 } ' file1 file2 file1 12 file2 7 or with any POSIX awk:
$ awk ' { lc=tolower($0); cnt[FILENAME] += (gsub(/[[:alpha:]]/,"&",lc) - gsub(/[aeiou]/,"&",lc)) } END { for (i=1; i<ARGC; i++) print ARGV[i], cnt[ARGV[i]]+0 } ' file1 file2 file1 12 file2 7 If you only want to count the specific characters b, c, d, etc. instead of all alphabetic characters that aren't aeiou, then just change ( gsub(/[[:alpha:]]/,"&") - gsub(/[aeiou]/,"&") ) above to gsub(/[bcdfghjklmnpqrtsvwxyz]/,"&"))
Note that, unlike any approach that prints results in an FNR==1 clause, both of the above scripts will handle empty files correctly by printing the file name and 0 as the count.
Also note the cnt+0 in the first script - the +0 ensures that the value printed will be a numeric 0 rather than a null string if the first file is empty.
If the same file name can appear multiple times in the input then add FNR==1{cnt[FILENAME]=0} to the start of the script if you want it output multiple times or add if (!seen[ARGV[i]]++) { ... } around the print in the END section if you only want it output once.
See https://unix.stackexchange.com/a/642372/133219 for an answer to the followup question of also counting vowels.