Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在两个文件的列中查找匹配项_File_Awk_Match_Field - Fatal编程技术网

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

File 在两个文件的列中查找匹配项,file,awk,match,field,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

我必须创建如下所示的文件:

文件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[$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