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

时间:2018-05-02 17:20:23

标签: file awk match field

我必须看起来像这样的文件:

档案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将每个名称格式化为一个列,但最终会有很多列和比较结果。

任何帮助?

由于

1 个答案:

答案 0 :(得分:1)

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

mir1 2
mir2 5

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