我必须看起来像这样的文件:
档案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将每个名称格式化为一个列,但最终会有很多列和比较结果。
任何帮助?
由于
答案 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 这使用正则表达式匹配而不是字符串相等,只要您的值中没有正则表达式特殊字符,就可以正常工作。