Uma solução para o awk - o código pode ser arrumado ou encurtado - Tenho certeza de que
$ cat file1
pat1
pat2
pat1
$ cat file2
pat2
pat2
pat1
$ awk -f 1.awk file1 file2
file pat1 pat2
file1 2 1
file2 1 2
$ cat 1.awk
BEGIN{
pat["pat1"]="pat1";
pat["pat2"]="pat2";
file["file1"]="file1";
file["file2"]="file2"
}
{
for (i in pat) {
if ($0 ~ i) pat_count[FILENAME,i]++
}
}
END {
printf("file\t\t")
for(i in pat) {
printf("%s\t\t",i)
}
printf("\n")
for (i in file) {
printf("%s\t\t",i)
for(j in pat) {
printf("%d\t\t", pat_count[i,j])
} ; printf("\n")
}
}