在两个文件的列中查找匹配项

Find matches within columns in two files

我必须要这样的文件:

文件 1

mir1    CAT1;DEM20;SCD;LIART;COLECC2
mir2    ELAM2;SIRT1;FROMO;PER1;PER2

文件 2

mir1    DEM20;LIART;ACACA;FOXO1;DIPEM
mir2    ELAM2;SIRT1;FROMO;PER1;PER2

我想比较第 2 列中的两个文件,以计算由“;”分隔的名称中的匹配项,第 2 列中的名称数量可能会有所不同,因此这只是一个示例。

所需的输出应该类似于匹配的计数,例如:

文件 3

mir1    2
mir2    5

因为两个文件之间的第一行有 2 个匹配项,第二行有 5 个匹配项。

我曾尝试使用 awk 将每个名称格式化为一个列,但结果一次得到许多列和比较。

有什么帮助吗?

谢谢

$ awk -v s=";" 'NR==FNR {a[]=s  s; next} 
                        {c=0; n=split(,b,s); 
                         for(i=1;i<=n;i++) c+=(a[] ~ s b[i] s); 
                         print ,c}' file1 file2

mir1 2
mir2 5

NB 这使用正则表达式匹配而不是字符串相等,只要您在值中没有正则表达式特殊字符就应该可以正常工作。